Skip to content
JavaScript CSS HTML
Permalink
Failed to load latest commit information.
.github fix(.github): Update pull request template (#15934) Oct 6, 2017
client feat(settings): Expand Settings page functionality (#16664) Feb 16, 2018
common fix: warning message for danger zone (#16757) Feb 21, 2018
config Remove unused authentication methods Jun 12, 2016
docs/images docs(common steps): Clarify PR instructions (#16667) Feb 10, 2018
public feat(Profile): Reactify profile page (#16743) Feb 19, 2018
seed fix(seed): Fix "Change the Color of Text" challenge not loading (#16764) Feb 22, 2018
server fix(redirects): Do not add private blocks/challenges to the map Feb 21, 2018
test/public/js Chore(tests): Move tests Sep 23, 2016
.babelrc style(babelrc): Format whitespace Jan 18, 2018
.editorconfig Add .editorconfig to enforce certain automatic behavior on all editors, Mar 29, 2015
.eslintignore Lint main js as part of CI Nov 7, 2015
.eslintrc feat: prep for modern challenges (#15781) Nov 10, 2017
.gitattributes Update .gitattributes Aug 5, 2015
.gitignore feat(bundle): Add bundle visualisation tool Jan 1, 2018
.jshintrc Remove duplicate object key Apr 24, 2016
.node-inspectorrc twitter username now persisted Oct 14, 2014
.snyk fix(synk): New fixes for 2 vulnerable dependency paths (#16521) Jan 18, 2018
.travis.yml chore(node): Update node version to 8x Oct 31, 2017
.vcmrc feat: enforce conventional commit messages Jul 13, 2017
CODE_OF_CONDUCT.md refactor: Replace .com with .org Aug 25, 2017
CONTRIBUTING.md docs(common steps): Clarify PR instructions (#16667) Feb 10, 2018
LICENSE.md Changing Copyright year to 2018 (#16401) Jan 2, 2018
README.md Updating Copyright Year (#16386) Jan 1, 2018
docker-compose.yml chore(node): Update node version to 8x Oct 31, 2017
gulpfile.js fix(tests): Improve test output (#16449) Feb 14, 2018
package-lock.json feat(Profile): Reactify profile page (#16743) Feb 19, 2018
package.json feat(Profile): Reactify profile page (#16743) Feb 19, 2018
pm2Start.js Remove unused authentication methods Jun 12, 2016
sample.env feat: added the IMAGE_BASE_URL key to the sample.env file (#15970) Oct 25, 2017
webpack.config.js feat(build): Add source maps to production Feb 6, 2018
webpack.frame-runner.js feat(build): Add source maps to production Feb 6, 2018

README.md

freeCodeCamp Social Banner

Throughput Graph

Join the chat at https://gitter.im/freecodecamp/freecodecamp Known Vulnerabilities Build Status Pull Requests Welcome first-timers-only Friendly

Welcome to freeCodeCamp's open source codebase and curriculum!

freeCodeCamp is a friendly open source community where you learn to code and help nonprofits.

We help our campers build job-worthy portfolios of real apps used by real people, while helping nonprofits.

You start by working through our self-paced, browser-based full stack JavaScript curriculum.

By working through our curriculum, you can earn four certifications:

1. Front End Certification

The first section will teach you the basics of how webpages work and also introduce you to JavaScript programming.

Skills you'll practice include HTML, CSS, JavaScript, jQuery and Bootstrap.

To earn this certification, you'll build 10 front-end projects and implement many JavaScript algorithms.

2. Data Visualization Certification

The second section builds upon the first and introduces you to more advanced topics such as Sass, React and D3.

To earn this certification, you'll build 5 React-apps and 5 Data visualization apps using D3.js.

3. Back End Certification

The third section introduces you to back end development using Node.js, Express, and MongoDB. It also teaches you about the important concept of source control using Git.

To earn this certification, you'll build 5 APIs and 5 full stack apps.

We will accept solutions implemented in any programming language, as long as both a live demo and the source code are publicly accessible.

4. Full Stack Certification

The fourth section is where you'll get real-world experience by working on projects for nonprofits. We'll pair you with another camper, an agile project manager, and a stakeholder from a nonprofit organization. Together, you'll plan, build and maintain apps that help that nonprofit carry out its mission more effectively.

For this certification, you'll work on two projects from scratch and then maintain/upgrade two existing projects.


This code is running live at freeCodeCamp.org. We also have Gitter chat rooms, a Medium publication, an interactive forum, a wiki knowledgebase, local FaceBook groups, and even a YouTube channel.

Join our community here.

Found a bug?

Do not file an issue until you have followed these steps:

  1. Read the Help I've Found a Bug article and follow its instructions.
  2. Ask for confirmation in the appropriate Help Room.
  3. Please do not open an issue without a 3rd party confirmation of your problem.

Contributing

We welcome pull requests from freeCodeCamp campers (our students) and seasoned JavaScript developers alike! Please follow these steps to contribute.

License

Copyright (c) 2018 freeCodeCamp.

The content of this repository bound by the following LICENSE(S)

  • The computer software is licensed under the BSD-3-Clause.
  • The curricular content in the /seed and subdirectories are licensed under the CC-BY-SA-4.0
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - twbs/bootstrap: The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.
Skip to content
The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.
CSS JavaScript HTML Other
Permalink
Failed to load latest commit information.
.github Suggest CodePen along with JSBin. (#24238) Oct 4, 2017
_data Restore sidebar nav link to Approach page Jan 18, 2018
_includes Use the SRI hashes for the live site's assets. (#25282) Jan 15, 2018
_layouts Examples updates (#24898) Jan 15, 2018
_plugins Use Jekyll's markdownify filter instead of a custom plugin (#25319) Jan 19, 2018
assets dist Feb 11, 2018
build Update copyright for 2k18 (#25303) Jan 15, 2018
dist dist Feb 19, 2018
docs/4.0 Be more explicit where to find variables (#25624) Feb 19, 2018
js Consistent usage of $(document.body) instead of $('body') (#25671) Feb 21, 2018
nuget Update copyright for 2k18 (#25303) Jan 15, 2018
scss make it a var Feb 20, 2018
.babelrc.js Object spread : less jQuery more ES6 (#24665) Nov 13, 2017
.editorconfig .editorconfig: remove rule for *.py files. (#24443) Oct 20, 2017
.eslintignore Clean up and tweak ESLint rules. Jan 11, 2018
.eslintrc.json Clean up and tweak ESLint rules. Jan 11, 2018
.gitattributes Update .gitattributes. (#24113) Sep 26, 2017
.gitignore Switch to stylelint. (#23572) Oct 3, 2017
.stylelintignore Clean up and tweak ESLint rules. Jan 11, 2018
.stylelintrc Update stylelint config to add missing properties (#25572) Feb 11, 2018
.travis.yml Work around Travis errors by switching to sudo. Jan 11, 2018
CNAME Restore CNAME (#24379) Oct 17, 2017
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md (#24629) Nov 1, 2017
Gemfile Update devDependencies and gems. (#25502) Jan 30, 2018
Gemfile.lock Update devDependencies and gems. (#25551) Feb 5, 2018
LICENSE Update copyright for 2k18 (#25303) Jan 15, 2018
README.md Remove -Pre from Nuget install Jan 20, 2018
_config.yml Update jQuery to v3.3.1. (#25398) Jan 23, 2018
composer.json Fix broken/redirected links, moving to HTTPS where possible. (#20557) Oct 3, 2016
favicon.ico Rearrange all the docs to allow for a docs/major.minor/ setup May 30, 2017
index.html Bump version to 4.0.0 Jan 18, 2018
package-lock.json Update devDependencies and gems. (#25551) Feb 5, 2018
package.js Bump version to 4.0.0 Jan 18, 2018
package.json Update devDependencies and gems. (#25551) Feb 5, 2018
robots.txt Rearrange all the docs to allow for a docs/major.minor/ setup May 30, 2017
sache.json Add sache.json Dec 15, 2014
sw.js Pre-cache key assets with Workboxjs. (#23533) Sep 15, 2017

README.md

Bootstrap

Sleek, intuitive, and powerful front-end framework for faster and easier web development.
Explore Bootstrap docs »

Bootstrap Themes · Job Board · Blog


Table of contents

Quick start

Several quick start options are available:

  • Download the latest release.
  • Clone the repo: git clone https://github.com/twbs/bootstrap.git
  • Install with npm: npm install bootstrap
  • Install with yarn: yarn add bootstrap@4.0.0
  • Install with Composer: composer require twbs/bootstrap:4.0.0
  • Install with NuGet: CSS: Install-Package bootstrap Sass: Install-Package bootstrap.sass

Read the Getting started page for information on the framework contents, templates and examples, and more.

Status

Slack Build Status npm version Gem version Meteor Atmosphere Packagist Prerelease NuGet peerDependencies Status devDependency Status CSS gzip size JS gzip size

Sauce Labs Test Status

What's included

Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:

bootstrap/
├── css/
│   ├── bootstrap.css
│   ├── bootstrap.css.map
│   ├── bootstrap.min.css
│   ├── bootstrap.min.css.map
│   ├── bootstrap-grid.css
│   ├── bootstrap-grid.css.map
│   ├── bootstrap-grid.min.css
│   ├── bootstrap-grid.min.css.map
│   ├── bootstrap-reboot.css
│   ├── bootstrap-reboot.css.map
│   ├── bootstrap-reboot.min.css
│   └── bootstrap-reboot.min.css.map
└── js/
    ├── bootstrap.bundle.js
    ├── bootstrap.bundle.min.js
    ├── bootstrap.js
    └── bootstrap.min.js

We provide compiled CSS and JS (bootstrap.*), as well as compiled and minified CSS and JS (bootstrap.min.*). CSS source maps (bootstrap.*.map) are available for use with certain browsers' developer tools. Bundled JS files (bootstrap.bundle.js and minified bootstrap.bundle.min.js) include Popper, but not jQuery.

Bugs and feature requests

Have a bug or a feature request? Please first read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.

Documentation

Bootstrap's documentation, included in this repo in the root directory, is built with Jekyll and publicly hosted on GitHub Pages at https://getbootstrap.com/. The docs may also be run locally.

Documentation search is powered by Algolia's DocSearch. Working on our search? Be sure to set debug: true in the _scripts.html include.

Running documentation locally

  1. Run through the tooling setup to install Jekyll (the site builder) and other Ruby dependencies with bundle install.
  2. Run npm install to install Node.js dependencies.
  3. Run npm run test (or a specific NPM script) to rebuild distributed CSS and JavaScript files, as well as our docs assets.
  4. From the root /bootstrap directory, run npm run docs-serve in the command line.
  5. Open http://localhost:9001 in your browser, and voilà.

Learn more about using Jekyll by reading its documentation.

Documentation for previous releases

Previous releases and their documentation are also available for download.

Contributing

Please read through our contributing guidelines. Included are directions for opening issues, coding standards, and notes on development.

Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the Code Guide, maintained by Mark Otto.

Editor preferences are available in the editor config for easy use in common text editors. Read more and download plugins at http://editorconfig.org/.

Community

Get updates on Bootstrap's development and chat with the project maintainers and community members.

  • Follow @getbootstrap on Twitter.
  • Read and subscribe to The Official Bootstrap Blog.
  • Join the official Slack room.
  • Chat with fellow Bootstrappers in IRC. On the irc.freenode.net server, in the ##bootstrap channel.
  • Implementation help may be found at Stack Overflow (tagged bootstrap-4).
  • Developers should use the keyword bootstrap on packages which modify or add to the functionality of Bootstrap when distributing through npm or similar delivery mechanisms for maximum discoverability.

Versioning

For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we'll adhere to those rules whenever possible.

See the Releases section of our GitHub project for changelogs for each release version of Bootstrap. Release announcement posts on the official Bootstrap blog contain summaries of the most noteworthy changes made in each release.

Creators

Mark Otto

Jacob Thornton

Copyright and license

Code and documentation copyright 2011-2018 the Bootstrap Authors and Twitter, Inc. Code released under the MIT License. Docs released under Creative Commons.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - EbookFoundation/free-programming-books: Freely available programming books
Skip to content
📚 Freely available programming books
Latest commit 746f118 Feb 22, 2018
sachin2404 and eshellman Update : Java Back-End Web Development Book (#2730)
An incremental in-depth tutorial about building Java back-end web applications with Java Server Faces (JSF) as the user interface technology and the Java Persistence API (JPA) for object-to-storage mapping and storage management.

Ref:- http://web-engineering.info/tech/JavaJpaJsf/book/index.html

Author:- Mircea Diaconescu and Gerd Wagner
Permalink
Failed to load latest commit information.
.editorconfig .editorconfig init May 22, 2014
.travis.yml Update lint node Mar 4, 2017
CODE_OF_CONDUCT.md Fix EOF / Markdown formatting Nov 12, 2015
CONTRIBUTING.md Implement "In process" formatting (#2538) Oct 2, 2017
LICENSE change vhf to EbookFoundation Jun 1, 2017
README.md Update README.md (#2708) Feb 5, 2018
_config.yml Set theme jekyll-theme-minimal Jun 30, 2017
free-courses-de.md Add "Python-Kurs" (#2629) Nov 1, 2017
free-courses-en.md Add Foundation of Data Structures to free-courses list (#2669) Dec 24, 2017
free-courses-es.md Spanish branch (spanish-speaker reviews requested!) (#2635) Nov 23, 2017
free-courses-ru.md reorder russian courses (#2577) Oct 12, 2017
free-courses-vi.md Add some Vietnamese courses. (#2682) Jan 4, 2018
free-podcasts-screencasts-cs.md added Kafemlejnek.TV to the free-podcasts-screencasts-cs.md (#2035) Aug 18, 2016
free-podcasts-screencasts-en.md Update free-podcasts-screencasts-en.md (#2717) Feb 8, 2018
free-podcasts-screencasts-es.md Fix formatting Apr 11, 2017
free-podcasts-screencasts-pt_BR.md Added Angular and Java Screencasts (#2690) Jan 20, 2018
free-podcasts-screencasts-ru.md Update free-podcasts-screencasts-ru.md (#2718) Feb 8, 2018
free-podcasts-screencasts-se.md Added a few swedish developer podcasts (#2627) Nov 1, 2017
free-programming-books-ar.md fix broken links (#2559) Oct 5, 2017
free-programming-books-az.md Fix Azerbaijani broken links (#2578) Oct 12, 2017
free-programming-books-bg.md Remove problematic links (#2235) Jan 15, 2017
free-programming-books-bl.md Create free-programming-books-bl.md (#2705) Feb 5, 2018
free-programming-books-cs.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-de.md add "Module, Klassen, Verträge" (#2678) Dec 31, 2017
free-programming-books-en.md For people looking at the file listing for the English list (#2689) Jan 22, 2018
free-programming-books-es.md Spanish branch (spanish-speaker reviews requested!) (#2635) Nov 23, 2017
free-programming-books-fa_IR.md Fixes #1892 Apr 4, 2016
free-programming-books-fi.md Add Finnish Language (#2244) Feb 4, 2017
free-programming-books-fr.md Koma-Script (#2663) Dec 1, 2017
free-programming-books-gr.md Add Greek PDF for SQL Servers (#2123) Nov 3, 2016
free-programming-books-hu.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-id.md fix broken links (#2559) Oct 5, 2017
free-programming-books-it.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-ja.md Fix Broken Links (#2603) Oct 23, 2017
free-programming-books-ko.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-mm.md Add Myanmar language books (#2320) Apr 2, 2017
free-programming-books-nl.md 2539: add the coder's apprentice book, Dutch version (#2644) Nov 14, 2017
free-programming-books-pl.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-pt_BR.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-pt_PT.md regularize pub year format (#2387) Jun 16, 2017
free-programming-books-ro.md Update broken links (#2318) Apr 2, 2017
free-programming-books-ru.md Update free-programming-books-ru.md (#2707) Feb 5, 2018
free-programming-books-se.md Formatting all files according to guidelines Nov 13, 2015
free-programming-books-sk.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-tr.md Add author for Git 101 (#2727) Feb 18, 2018
free-programming-books-ua.md 2626: add translated versions of django girls (#2643) Nov 12, 2017
free-programming-books-zh.md Added Go In Action Notes by flysnow (#2724) Feb 15, 2018
free-programming-books.md Update : Java Back-End Web Development Book (#2730) Feb 22, 2018
free-programming-interactive-tutorials-en.md Update free-programming-interactive-tutorials-en.md (#2721) Feb 8, 2018
free-programming-interactive-tutorials-ru.md Create free-programming-interactive-tutorials-ru.md (#2719) Feb 8, 2018
free-programming-playgrounds.md Add Scastie (#2702) Feb 1, 2018
javascript-frameworks-resources-pt_BR.md add "Framework Backbone (Javascript)" (#2614) Oct 24, 2017
javascript-frameworks-resources.md Uniform treatment of Leanpub books (#2692) Jan 29, 2018
problem-sets-competitive-programming.md Caribbean Online Judge added (#2655) Nov 25, 2017

README.md

List of Free Learning Resources Awesome

View the English list

Intro

This list was originally a clone of stackoverflow - List of Freely Available Programming Books with contributions from Karan Bhangui and George Stocker.

The list was moved to GitHub by Victor Felder for collaborative updating and maintenance. It has grown to become one of the most popular repositories on Github, with over 97,000 stars, over 4500 commits, over 950 contributors, and over 24,000 forks.

The repo is now administered by the Free Ebook Foundation, a not-for-profit organization devoted to promoting the creation, distribution, archiving and sustainability of free ebooks. Donations to the Free Ebook Foundation are tax-deductible in the US.

How To Contribute

Please read CONTRIBUTING.

How to Share

In Other Spoken Languages

Free Online Courses

Interactive Programming Resources

JavaScript Frameworks and Resources

Problem Sets and Competitive Programming

Podcast - Screencast

Free Podcasts and Screencasts:

Programming Playgrounds

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - tensorflow/tensorflow: Computation using data flow graphs for scalable machine learning
Skip to content
C++ Python HTML Jupyter Notebook Go Java Other
Latest commit 671baf0 Feb 22, 2018
case540 and gunan Make configure script runnable from external workspace. (#17172)
To run from external workspace, you should now be able to invoke
script like the following. This will generate some TensorFlow specfic
bazel options and import them into your project's .bazelrc.

$(bazel info output_base)/external/org_tensorflow/configure.py --workspace=$(PWD)

README.md




Linux CPU Linux GPU Mac OS CPU Windows CPU Android
Build Status Build Status Build Status Build Status Build Status Download

TensorFlow is an open source software library for numerical computation using data flow graphs. The graph nodes represent mathematical operations, while the graph edges represent the multidimensional data arrays (tensors) that flow between them. This flexible architecture lets you deploy computation to one or more CPUs or GPUs in a desktop, server, or mobile device without rewriting code. TensorFlow also includes TensorBoard, a data visualization toolkit.

TensorFlow was originally developed by researchers and engineers working on the Google Brain team within Google's Machine Intelligence Research organization for the purposes of conducting machine learning and deep neural networks research. The system is general enough to be applicable in a wide variety of other domains, as well.

If you want to contribute to TensorFlow, be sure to review the contribution guidelines. This project adheres to TensorFlow's code of conduct. By participating, you are expected to uphold this code.

We use GitHub issues for tracking requests and bugs. So please see TensorFlow Discuss for general questions and discussion, and please direct specific questions to Stack Overflow.

The TensorFlow project strives to abide by generally accepted best practices in open-source software development:

CII Best Practices

Installation

See Installing TensorFlow for instructions on how to install our release binaries or how to build from source.

People who are a little more adventurous can also try our nightly binaries:

Nightly pip packages

  • We are pleased to announce that TensorFlow now offers nightly pip packages under the tf-nightly and tf-nightly-gpu project on pypi. Simply run pip install tf-nightly or pip install tf-nightly-gpu in a clean environment to install the nightly TensorFlow build. We support CPU and GPU packages on Linux, Mac, and Windows.

Individual whl files

Try your first TensorFlow program

$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a + b)
42
>>> sess.close()

For more information

Learn more about the TensorFlow community at the community page of tensorflow.org for a few ways to participate.

License

Apache License 2.0

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - facebook/react: A declarative, efficient, and flexible JavaScript library for building user interfaces.
Skip to content
A declarative, efficient, and flexible JavaScript library for building user interfaces.
JavaScript C++ HTML TypeScript CoffeeScript Shell Other
Latest commit 2bd1222 Feb 21, 2018
sophiebits Format danger percents better (#12256)
Test Plan: yolo? yarn danger pr didn't give me any useful output. :\
Permalink
Failed to load latest commit information.
.circleci CI: remove unnecessary Yarn download (#11684) Nov 28, 2017
.github Reword issue template Jan 3, 2018
fixtures Minor typos fixed (#12005) Jan 11, 2018
packages [fabric] Forked ReactNativeInjection for Fabric and avoid RCTEventEmi… Feb 21, 2018
scripts Format danger percents better (#12256) Feb 21, 2018
.babelrc Compile spread to Object.assign calls (#10387) Aug 4, 2017
.editorconfig Add insert_final_newline to editorconfig Sep 3, 2015
.eslintignore Use Yarn Workspaces (#11252) Oct 18, 2017
.eslintrc.js Disable for...of by default, rewrite cases where it matters (#12198) Feb 9, 2018
.flowconfig Update flow (0.61.0) and declare context type (#11840) Dec 18, 2017
.flowcoverage flow-coverage-report (#11545) Jan 9, 2018
.gitattributes .gitattributes to ensure LF line endings when we should Jan 18, 2014
.gitignore flow-coverage-report (#11545) Jan 9, 2018
.mailmap Update .mailmap Sep 6, 2017
.nvmrc Add new docs website (#10896) Sep 28, 2017
.prettierrc.js Use Prettier Config API (#11980) Jan 7, 2018
.watchmanconfig Added a .watchmanconfig file (#11581) Nov 17, 2017
AUTHORS Update authors for v16 (#10861) Sep 27, 2017
CHANGELOG.md Update HTTP to HTTPs in CHANGELOG.md (#11634) Jan 5, 2018
CODE_OF_CONDUCT.md Add `CODE_OF_CONDUCT.md` (#11512) Nov 10, 2017
CONTRIBUTING.md [Gatsby] "https://facebook.github.io/react/" -> "https://reactjs.org/" ( Sep 30, 2017
LICENSE Change license and remove references to PATENTS Sep 26, 2017
README.md Fix links in README.md (#11954) Jan 3, 2018
appveyor.yml Run "yarn prettier" on Appveyor Jan 7, 2018
dangerfile.js Format danger percents better (#12256) Feb 21, 2018
package.json Updating package versions for release 16.3.0-alpha.1 Feb 12, 2018
yarn.lock Disable for...of by default, rewrite cases where it matters (#12198) Feb 9, 2018

README.md

React · GitHub license npm version Coverage Status CircleCI Status PRs Welcome

React is a JavaScript library for building user interfaces.

  • Declarative: React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes. Declarative views make your code more predictable, simpler to understand, and easier to debug.
  • Component-Based: Build encapsulated components that manage their own state, then compose them to make complex UIs. Since component logic is written in JavaScript instead of templates, you can easily pass rich data through your app and keep state out of the DOM.
  • Learn Once, Write Anywhere: We don't make assumptions about the rest of your technology stack, so you can develop new features in React without rewriting existing code. React can also render on the server using Node and power mobile apps using React Native.

Learn how to use React in your own project.

Documentation

You can find the React documentation on the website.
It is divided into several sections:

You can improve it by sending pull requests to this repository.

Examples

We have several examples on the website. Here is the first one to get you started:

class HelloMessage extends React.Component {
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}

ReactDOM.render(
  <HelloMessage name="John" />,
  document.getElementById('container')
);

This example will render "Hello John" into a container on the page.

You'll notice that we used an HTML-like syntax; we call it JSX. JSX is not required to use React, but it makes code more readable, and writing it feels like writing HTML. We recommend using Babel with a React preset to convert JSX into native JavaScript for browsers to digest.

Installation

React is available as the react package on npm. It is also available on a CDN.

React is flexible and can be used in a variety of projects. You can create new apps with it, but you can also gradually introduce it into an existing codebase without doing a rewrite.

The recommended way to install React depends on your project. Here you can find short guides for the most common scenarios:

Contributing

The main purpose of this repository is to continue to evolve React core, making it faster and easier to use. Development of React happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements. Read below to learn how you can take part in improving React.

Code of Conduct

Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read the full text so that you can understand what actions will and will not be tolerated.

Contributing Guide

Read our contributing guide to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes to React.

Good First Issues

To help you get your feet wet and get you familiar with our contribution process, we have a list of good first issues that contain bugs which have a relatively limited scope. This is a great place to get started.

License

React is MIT licensed.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - vuejs/vue: 🖖 A progressive, incrementally-adoptable JavaScript framework for building UI on the web.
Skip to content
🖖 A progressive, incrementally-adoptable JavaScript framework for building UI on the web.
JavaScript Other

README.md

Vue logo

Build Status Coverage Status Downloads Version License Chat
Sauce Test Status

Supporting Vue.js

Vue.js is an MIT-licensed open source project. It's an independent project with its ongoing development made possible entirely thanks to the support by these awesome backers. If you'd like to join them, please consider:

What's the difference between Patreon and OpenCollective?

Funds donated via Patreon go directly to support Evan You's full-time work on Vue.js. Funds donated via OpenCollective are managed with transparent expenses and will be used for compensating work and expenses for core team members or sponsoring community events. Your name/logo will receive proper recognition and exposure by donating on either platform.

Special Sponsors

Sponsors via Patreon

Platinum

Gold

Sponsors via Open Collective

Platinum

Gold


Introduction

Vue (pronounced /vjuː/, like view) is a progressive framework for building user interfaces. It is designed from the ground up to be incrementally adoptable, and can easily scale between a library and a framework depending on different use cases. It consists of an approachable core library that focuses on the view layer only, and an ecosystem of supporting libraries that helps you tackle complexity in large Single-Page Applications.

Browser Compatibility

Vue.js supports all browsers that are ES5-compliant (IE8 and below are not supported).

Ecosystem

Project Status Description
vue-router vue-router-status Single-page application routing
vuex vuex-status Large-scale state management
vue-cli vue-cli-status Project scaffolding
vue-loader vue-loader-status Single File Component (*.vue file) loader for webpack
vue-server-renderer vue-server-renderer-status Server-side rendering support
vue-class-component vue-class-component-status TypeScript decorator for a class-based API
vue-rx vue-rx-status RxJS integration
vue-devtools vue-devtools-status Browser DevTools extension

Documentation

To check out live examples and docs, visit vuejs.org.

Questions

For questions and support please use the the official forum or community chat. The issue list of this repo is exclusively for bug reports and feature requests.

Issues

Please make sure to read the Issue Reporting Checklist before opening an issue. Issues not conforming to the guidelines may be closed immediately.

Changelog

Detailed changes for each release are documented in the release notes.

Stay In Touch

Contribution

Please make sure to read the Contributing Guide before making a pull request. If you have a Vue-related project/component/tool, add it with a pull request to this curated list!

Thank you to all the people who already contributed to Vue!

License

MIT

Copyright (c) 2013-present, Yuxi (Evan) You

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - sindresorhus/awesome: Curated list of awesome lists
Skip to content
Switch branches/tags
Nothing to show
Latest commit f40e4e0 Feb 15, 2018

readme.md

Awesome

What is an awesome list?    Contribution guide    Creating a list    Twitter    Stickers & t-shirts


🐦
Improve your Twitter experience with this browser extension I made


Just type awesome.re to go here. Check out my blog and follow me on Twitter.


Contents

Platforms

Programming Languages

Front-End Development

Back-End Development

Computer Science

Big Data

Theory

Books

Editors

Gaming

Development Environment

Entertainment

Databases

Media

Learn

Security

Content Management Systems

Hardware

Business

Work

Networking

Decentralized Systems

  • Bitcoin - Bitcoin services and tools for software developers.
  • Ripple - Open source distributed settlement network.
  • Non-Financial Blockchain - Non-financial blockchain applications.
  • Mastodon - Open source decentralized microblogging network.

Miscellaneous

License

CC0

To the extent possible under law, Sindre Sorhus has waived all copyright and related or neighboring rights to this work.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - getify/You-Dont-Know-JS: A book series on JavaScript. @YDKJS on twitter.
Skip to content
Switch branches/tags
Nothing to show
Latest commit 6f51ed6 Feb 17, 2018
getify Merge pull request #1223 from hoodwink73/master
Update the 'Become a Patron' badge

README.md

You Don't Know JS (book series)

This is a series of books diving deep into the core mechanisms of the JavaScript language. The first edition of the series is now complete.

         

Please feel free to contribute to the quality of this content by submitting PR's for improvements to code snippets, explanations, etc. While typo fixes are welcomed, they will likely be caught through normal editing processes, and are thus not necessarily as important for this repository.

To read more about the motivations and perspective behind this book series, check out the Preface.

Titles

Publishing

These books are being released here as drafts, free to read, but are also being edited, produced, and published through O'Reilly.

If you like the content you find here, and want to support more content like it, please purchase the books once they are available for sale, through your normal book sources. :)

If you'd like to contribute financially towards the effort (or any of my other OSS work) aside from purchasing the books, I do have a patreon that I would always appreciate your generosity towards.

patreon.png

In-person Training

The content for these books derives heavily from a series of training materials I teach professionally (in both public and private-corporate workshop format): "Deep JavaScript Foundations", "Rethinking Async", and "ES6: The Right Parts" workshops.

If you like this content and would like to contact me regarding conducting training on these, or other various JS/HTML5/node.js topics, please reach out to me through email: getify @ gmail

Online Video Training

I also have some JS training material available in on-demand video format. I teach courses through Frontend Masters, like my Deep JavaScript Foundations workshop. You can find all my courses here.

Some of those courses are also distributed on other platforms, like Pluralsight, Lynda.com, and O'Reilly Safari Online.

Contributions

Any contributions you make to this effort are of course greatly appreciated.

But PLEASE read the Contributions Guidelines carefully before submitting a PR.

License & Copyright

The materials herein are all (c) 2013-2017 Kyle Simpson.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 4.0 Unported License.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - d3/d3: Bring data to life with SVG, Canvas and HTML.
Skip to content
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript
Latest commit 44bace0 Feb 7, 2018

README.md

D3: Data-Driven Documents

D3 (or D3.js) is a JavaScript library for visualizing data using web standards. D3 helps you bring data to life using SVG, Canvas and HTML. D3 combines powerful visualization and interaction techniques with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers and the freedom to design the right visual interface for your data.

Resources

Installing

If you use npm, npm install d3. Otherwise, download the latest release. The released bundle supports anonymous AMD, CommonJS, and vanilla environments. You can load directly from d3js.org, CDNJS, or unpkg. For example:

<script src="https://d3js.org/d3.v5.js"></script>

For the minified version:

<script src="https://d3js.org/d3.v5.min.js"></script>

You can also use the standalone D3 microlibraries. For example, d3-selection:

<script src="https://d3js.org/d3-selection.v1.js"></script>

D3 is written using ES2015 modules. Create a custom bundle using Rollup, Webpack, or your preferred bundler. To import D3 into an ES2015 application, either import specific symbols from specific D3 modules:

import {scaleLinear} from "d3-scale";

Or import everything into a namespace (here, d3):

import * as d3 from "d3";

In Node:

var d3 = require("d3");

You can also require individual modules and combine them into a d3 object using Object.assign:

var d3 = Object.assign({}, require("d3-format"), require("d3-geo"), require("d3-geo-projection"));
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - airbnb/javascript: JavaScript Style Guide
Skip to content
JavaScript
Switch branches/tags
eslint-config-airbnb-v16.1.0 eslint-config-airbnb-v16.0.0 eslint-config-airbnb-v15.1.0 eslint-config-airbnb-v15.0.2 eslint-config-airbnb-v15.0.1 eslint-config-airbnb-v15.0.0 eslint-config-airbnb-v14.1.0 eslint-config-airbnb-v14.0.0 eslint-config-airbnb-v13.0.0 eslint-config-airbnb-v12.0.0 eslint-config-airbnb-v11.2.0 eslint-config-airbnb-v11.1.0 eslint-config-airbnb-v11.0.0 eslint-config-airbnb-v10.0.1 eslint-config-airbnb-v10.0.0 eslint-config-airbnb-v9.0.1 eslint-config-airbnb-v9.0.0 eslint-config-airbnb-v8.0.0 eslint-config-airbnb-v7.0.0 eslint-config-airbnb-v6.2.0 eslint-config-airbnb-v6.1.0 eslint-config-airbnb-v6.0.2 eslint-config-airbnb-v6.0.1 eslint-config-airbnb-v6.0.0 eslint-config-airbnb-v5.0.1 eslint-config-airbnb-v5.0.0 eslint-config-airbnb-v4.0.0 eslint-config-airbnb-v3.1.0 eslint-config-airbnb-v3.0.2 eslint-config-airbnb-v3.0.1 eslint-config-airbnb-v3.0.0 eslint-config-airbnb-v2.1.1 eslint-config-airbnb-v2.1.0 eslint-config-airbnb-v2.0.0 eslint-config-airbnb-v1.0.2 eslint-config-airbnb-v1.0.1 eslint-config-airbnb-v1.0.0 eslint-config-airbnb-v0.1.1 eslint-config-airbnb-v0.1.0 eslint-config-airbnb-v0.0.9 eslint-config-airbnb-v0.0.8 eslint-config-airbnb-v0.0.7 eslint-config-airbnb-base-v12.1.0 eslint-config-airbnb-base-v12.0.2 eslint-config-airbnb-base-v12.0.1 eslint-config-airbnb-base-v12.0.0 eslint-config-airbnb-base-v11.3.2 eslint-config-airbnb-base-v11.3.1 eslint-config-airbnb-base-v11.3.0 eslint-config-airbnb-base-v11.2.0 eslint-config-airbnb-base-v11.1.3 eslint-config-airbnb-base-v11.1.2 eslint-config-airbnb-base-v11.1.1 eslint-config-airbnb-base-v11.1.0 eslint-config-airbnb-base-v11.0.1 eslint-config-airbnb-base-v11.0.0 eslint-config-airbnb-base-v10.0.1 eslint-config-airbnb-base-v10.0.0 eslint-config-airbnb-base-v9.0.0 eslint-config-airbnb-base-v8.0.0 eslint-config-airbnb-base-v7.2.0 eslint-config-airbnb-base-v7.1.0 eslint-config-airbnb-base-v7.0.1 eslint-config-airbnb-base-v7.0.0 eslint-config-airbnb-base-v6.0.0 eslint-config-airbnb-base-v5.0.3 eslint-config-airbnb-base-v5.0.2 eslint-config-airbnb-base-v5.0.1 eslint-config-airbnb-base-v5.0.0 eslint-config-airbnb-base-v4.0.2 eslint-config-airbnb-base-v4.0.1 eslint-config-airbnb-base-v4.0.0 eslint-config-airbnb-base-v3.0.1 eslint-config-airbnb-base-v3.0.0 eslint-config-airbnb-base-v2.0.0 eslint-config-airbnb-base-v1.0.4 eslint-config-airbnb-base-v1.0.3 eslint-config-airbnb-base-v1.0.2 eslint-config-airbnb-base-v1.0.1 eslint-config-airbnb-base-v1.0.0 es5-deprecated
Nothing to show

README.md

Airbnb JavaScript Style Guide() {

A mostly reasonable approach to JavaScript

Note: this guide assumes you are using Babel, and requires that you use babel-preset-airbnb or the equivalent. It also assumes you are installing shims/polyfills in your app, with airbnb-browser-shims or the equivalent.

Downloads Downloads Gitter

This guide is available in other languages too. See Translation

Other Style Guides

Table of Contents

  1. Types
  2. References
  3. Objects
  4. Arrays
  5. Destructuring
  6. Strings
  7. Functions
  8. Arrow Functions
  9. Classes & Constructors
  10. Modules
  11. Iterators and Generators
  12. Properties
  13. Variables
  14. Hoisting
  15. Comparison Operators & Equality
  16. Blocks
  17. Control Statements
  18. Comments
  19. Whitespace
  20. Commas
  21. Semicolons
  22. Type Casting & Coercion
  23. Naming Conventions
  24. Accessors
  25. Events
  26. jQuery
  27. ECMAScript 5 Compatibility
  28. ECMAScript 6+ (ES 2015+) Styles
  29. Standard Library
  30. Testing
  31. Performance
  32. Resources
  33. In the Wild
  34. Translation
  35. The JavaScript Style Guide Guide
  36. Chat With Us About JavaScript
  37. Contributors
  38. License
  39. Amendments

Types

  • 1.1 Primitives: When you access a primitive type you work directly on its value.

    • string
    • number
    • boolean
    • null
    • undefined
    • symbol
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    • Symbols cannot be faithfully polyfilled, so they should not be used when targeting browsers/environments that don't support them natively.

  • 1.2 Complex: When you access a complex type you work on a reference to its value.

    • object
    • array
    • function
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9

⬆ back to top

References

  • 2.1 Use const for all of your references; avoid using var. eslint: prefer-const, no-const-assign

    Why? This ensures that you can’t reassign your references, which can lead to bugs and difficult to comprehend code.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;

  • 2.2 If you must reassign references, use let instead of var. eslint: no-var jscs: disallowVar

    Why? let is block-scoped rather than function-scoped like var.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }

  • 2.3 Note that both let and const are block-scoped.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError

⬆ back to top

Objects

  • 3.1 Use the literal syntax for object creation. eslint: no-new-object

    // bad
    const item = new Object();
    
    // good
    const item = {};

  • 3.2 Use computed property names when creating objects with dynamic property names.

    Why? They allow you to define all the properties of an object in one place.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };

  • 3.3 Use object method shorthand. eslint: object-shorthand jscs: requireEnhancedObjectLiterals

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };

  • 3.4 Use property value shorthand. eslint: object-shorthand jscs: requireEnhancedObjectLiterals

    Why? It is shorter to write and descriptive.

    const lukeSkywalker = 'Luke Skywalker';
    
    // bad
    const obj = {
      lukeSkywalker: lukeSkywalker,
    };
    
    // good
    const obj = {
      lukeSkywalker,
    };

  • 3.5 Group your shorthand properties at the beginning of your object declaration.

    Why? It’s easier to tell which properties are using the shorthand.

    const anakinSkywalker = 'Anakin Skywalker';
    const lukeSkywalker = 'Luke Skywalker';
    
    // bad
    const obj = {
      episodeOne: 1,
      twoJediWalkIntoACantina: 2,
      lukeSkywalker,
      episodeThree: 3,
      mayTheFourth: 4,
      anakinSkywalker,
    };
    
    // good
    const obj = {
      lukeSkywalker,
      anakinSkywalker,
      episodeOne: 1,
      twoJediWalkIntoACantina: 2,
      episodeThree: 3,
      mayTheFourth: 4,
    };

  • 3.6 Only quote properties that are invalid identifiers. eslint: quote-props jscs: disallowQuotedKeysInObjects

    Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.

    // bad
    const bad = {
      'foo': 3,
      'bar': 4,
      'data-blah': 5,
    };
    
    // good
    const good = {
      foo: 3,
      bar: 4,
      'data-blah': 5,
    };

  • 3.7 Do not call Object.prototype methods directly, such as hasOwnProperty, propertyIsEnumerable, and isPrototypeOf.

    Why? These methods may be shadowed by properties on the object in question - consider { hasOwnProperty: false } - or, the object may be a null object (Object.create(null)).

    // bad
    console.log(object.hasOwnProperty(key));
    
    // good
    console.log(Object.prototype.hasOwnProperty.call(object, key));
    
    // best
    const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
    /* or */
    import has from 'has'; // https://www.npmjs.com/package/has
    // ...
    console.log(has.call(object, key));

  • 3.8 Prefer the object spread operator over Object.assign to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.

    // very bad
    const original = { a: 1, b: 2 };
    const copy = Object.assign(original, { c: 3 }); // this mutates `original` ಠ_ಠ
    delete copy.a; // so does this
    
    // bad
    const original = { a: 1, b: 2 };
    const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }
    
    // good
    const original = { a: 1, b: 2 };
    const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }
    
    const { a, ...noA } = copy; // noA => { b: 2, c: 3 }

⬆ back to top

Arrays

  • 4.1 Use the literal syntax for array creation. eslint: no-array-constructor

    // bad
    const items = new Array();
    
    // good
    const items = [];

  • 4.2 Use Array#push instead of direct assignment to add items to an array.

    const someStack = [];
    
    // bad
    someStack[someStack.length] = 'abracadabra';
    
    // good
    someStack.push('abracadabra');

  • 4.3 Use array spreads ... to copy arrays.

    // bad
    const len = items.length;
    const itemsCopy = [];
    let i;
    
    for (i = 0; i < len; i += 1) {
      itemsCopy[i] = items[i];
    }
    
    // good
    const itemsCopy = [...items];

  • 4.4 To convert an array-like object to an array, use spreads ... instead of Array.from.

    const foo = document.querySelectorAll('.foo');
    
    // good
    const nodes = Array.from(foo);
    
    // best
    const nodes = [...foo];

  • 4.5 Use Array.from instead of spread ... for mapping over iterables, because it avoids creating an intermediate array.

    // bad
    const baz = [...foo].map(bar);
    
    // good
    const baz = Array.from(foo, bar);

  • 4.6 Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following 8.2. eslint: array-callback-return

    // good
    [1, 2, 3].map((x) => {
      const y = x + 1;
      return x * y;
    });
    
    // good
    [1, 2, 3].map(x => x + 1);
    
    // bad - no returned value means `acc` becomes undefined after the first iteration
    [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
      const flatten = acc.concat(item);
      acc[index] = flatten;
    });
    
    // good
    [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
      const flatten = acc.concat(item);
      acc[index] = flatten;
      return flatten;
    });
    
    // bad
    inbox.filter((msg) => {
      const { subject, author } = msg;
      if (subject === 'Mockingbird') {
        return author === 'Harper Lee';
      } else {
        return false;
      }
    });
    
    // good
    inbox.filter((msg) => {
      const { subject, author } = msg;
      if (subject === 'Mockingbird') {
        return author === 'Harper Lee';
      }
    
      return false;
    });

  • 4.7 Use line breaks after open and before close array brackets if an array has multiple lines

    // bad
    const arr = [
      [0, 1], [2, 3], [4, 5],
    ];
    
    const objectInArray = [{
      id: 1,
    }, {
      id: 2,
    }];
    
    const numberInArray = [
      1, 2,
    ];
    
    // good
    const arr = [[0, 1], [2, 3], [4, 5]];
    
    const objectInArray = [
      {
        id: 1,
      },
      {
        id: 2,
      },
    ];
    
    const numberInArray = [
      1,
      2,
    ];

⬆ back to top

Destructuring

  • 5.1 Use object destructuring when accessing and using multiple properties of an object. eslint: prefer-destructuring jscs: requireObjectDestructuring

    Why? Destructuring saves you from creating temporary references for those properties.

    // bad
    function getFullName(user) {
      const firstName = user.firstName;
      const lastName = user.lastName;
    
      return `${firstName} ${lastName}`;
    }
    
    // good
    function getFullName(user) {
      const { firstName, lastName } = user;
      return `${firstName} ${lastName}`;
    }
    
    // best
    function getFullName({ firstName, lastName }) {
      return `${firstName} ${lastName}`;
    }

  • 5.3 Use object destructuring for multiple return values, not array destructuring. jscs: disallowArrayDestructuringReturn

    Why? You can add new properties over time or change the order of things without breaking call sites.

    // bad
    function processInput(input) {
      // then a miracle occurs
      return [left, right, top, bottom];
    }
    
    // the caller needs to think about the order of return data
    const [left, __, top] = processInput(input);
    
    // good
    function processInput(input) {
      // then a miracle occurs
      return { left, right, top, bottom };
    }
    
    // the caller selects only the data they need
    const { left, top } = processInput(input);

⬆ back to top

Strings

  • 6.1 Use single quotes '' for strings. eslint: quotes jscs: validateQuoteMarks

    // bad
    const name = "Capt. Janeway";
    
    // bad - template literals should contain interpolation or newlines
    const name = `Capt. Janeway`;
    
    // good
    const name = 'Capt. Janeway';

  • 6.2 Strings that cause the line to go over 100 characters should not be written across multiple lines using string concatenation.

    Why? Broken strings are painful to work with and make code less searchable.

    // bad
    const errorMessage = 'This is a super long error that was thrown because \
    of Batman. When you stop to think about how Batman had anything to do \
    with this, you would get nowhere \
    fast.';
    
    // bad
    const errorMessage = 'This is a super long error that was thrown because ' +
      'of Batman. When you stop to think about how Batman had anything to do ' +
      'with this, you would get nowhere fast.';
    
    // good
    const errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';

  • 6.3 When programmatically building up strings, use template strings instead of concatenation. eslint: prefer-template template-curly-spacing jscs: requireTemplateStrings

    Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.

    // bad
    function sayHi(name) {
      return 'How are you, ' + name + '?';
    }
    
    // bad
    function sayHi(name) {
      return ['How are you, ', name, '?'].join();
    }
    
    // bad
    function sayHi(name) {
      return `How are you, ${ name }?`;
    }
    
    // good
    function sayHi(name) {
      return `How are you, ${name}?`;
    }

  • 6.4 Never use eval() on a string, it opens too many vulnerabilities. eslint: no-eval

  • 6.5 Do not unnecessarily escape characters in strings. eslint: no-useless-escape

    Why? Backslashes harm readability, thus they should only be present when necessary.

    // bad
    const foo = '\'this\' \i\s \"quoted\"';
    
    // good
    const foo = '\'this\' is "quoted"';
    const foo = `my name is '${name}'`;

⬆ back to top

Functions

  • 7.1 Use named function expressions instead of function declarations. eslint: func-style jscs: disallowFunctionDeclarations

    Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error's call stack. (Discussion)

    // bad
    function foo() {
      // ...
    }
    
    // bad
    const foo = function () {
      // ...
    };
    
    // good
    // lexical name distinguished from the variable-referenced invocation(s)
    const short = function longUniqueMoreDescriptiveLexicalFoo() {
      // ...
    };

  • 7.2 Wrap immediately invoked function expressions in parentheses. eslint: wrap-iife jscs: requireParenthesesAroundIIFE

    Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.

    // immediately-invoked function expression (IIFE)
    (function () {
      console.log('Welcome to the Internet. Please follow me.');
    }());

  • 7.3 Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: no-loop-func

  • 7.4 Note: ECMA-262 defines a block as a list of statements. A function declaration is not a statement.

    // bad
    if (currentUser) {
      function test() {
        console.log('Nope.');
      }
    }
    
    // good
    let test;
    if (currentUser) {
      test = () => {
        console.log('Yup.');
      };
    }

  • 7.5 Never name a parameter arguments. This will take precedence over the arguments object that is given to every function scope.

    // bad
    function foo(name, options, arguments) {
      // ...
    }
    
    // good
    function foo(name, options, args) {
      // ...
    }

  • 7.6 Never use arguments, opt to use rest syntax ... instead. eslint: prefer-rest-params

    Why? ... is explicit about which arguments you want pulled. Plus, rest arguments are a real Array, and not merely Array-like like arguments.

    // bad
    function concatenateAll() {
      const args = Array.prototype.slice.call(arguments);
      return args.join('');
    }
    
    // good
    function concatenateAll(...args) {
      return args.join('');
    }

  • 7.7 Use default parameter syntax rather than mutating function arguments.

    // really bad
    function handleThings(opts) {
      // No! We shouldn’t mutate function arguments.
      // Double bad: if opts is falsy it'll be set to an object which may
      // be what you want but it can introduce subtle bugs.
      opts = opts || {};
      // ...
    }
    
    // still bad
    function handleThings(opts) {
      if (opts === void 0) {
        opts = {};
      }
      // ...
    }
    
    // good
    function handleThings(opts = {}) {
      // ...
    }

  • 7.8 Avoid side effects with default parameters.

    Why? They are confusing to reason about.

    var b = 1;
    // bad
    function count(a = b++) {
      console.log(a);
    }
    count();  // 1
    count();  // 2
    count(3); // 3
    count();  // 3

  • 7.9 Always put default parameters last.

    // bad
    function handleThings(opts = {}, name) {
      // ...
    }
    
    // good
    function handleThings(name, opts = {}) {
      // ...
    }

  • 7.10 Never use the Function constructor to create a new function. eslint: no-new-func

    Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.

    // bad
    var add = new Function('a', 'b', 'return a + b');
    
    // still bad
    var subtract = Function('a', 'b', 'return a - b');

  • 7.11 Spacing in a function signature. eslint: space-before-function-paren space-before-blocks

    Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.

    // bad
    const f = function(){};
    const g = function (){};
    const h = function() {};
    
    // good
    const x = function () {};
    const y = function a() {};

  • 7.12 Never mutate parameters. eslint: no-param-reassign

    Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.

    // bad
    function f1(obj) {
      obj.key = 1;
    }
    
    // good
    function f2(obj) {
      const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
    }

  • 7.13 Never reassign parameters. eslint: no-param-reassign

    Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the arguments object. It can also cause optimization issues, especially in V8.

    // bad
    function f1(a) {
      a = 1;
      // ...
    }
    
    function f2(a) {
      if (!a) { a = 1; }
      // ...
    }
    
    // good
    function f3(a) {
      const b = a || 1;
      // ...
    }
    
    function f4(a = 1) {
      // ...
    }

  • 7.14 Prefer the use of the spread operator ... to call variadic functions. eslint: prefer-spread

    Why? It’s cleaner, you don’t need to supply a context, and you can not easily compose new with apply.

    // bad
    const x = [1, 2, 3, 4, 5];
    console.log.apply(console, x);
    
    // good
    const x = [1, 2, 3, 4, 5];
    console.log(...x);
    
    // bad
    new (Function.prototype.bind.apply(Date, [null, 2016, 8, 5]));
    
    // good
    new Date(...[2016, 8, 5]);

  • 7.15 Functions with multiline signatures, or invocations, should be indented just like every other multiline list in this guide: with each item on a line by itself, with a trailing comma on the last item.

    // bad
    function foo(bar,
                 baz,
                 quux) {
      // ...
    }
    
    // good
    function foo(
      bar,
      baz,
      quux,
    ) {
      // ...
    }
    
    // bad
    console.log(foo,
      bar,
      baz);
    
    // good
    console.log(
      foo,
      bar,
      baz,
    );

⬆ back to top

Arrow Functions

  • 8.1 When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: prefer-arrow-callback, arrow-spacing jscs: requireArrowFunctions

    Why? It creates a version of the function that executes in the context of this, which is usually what you want, and is a more concise syntax.

    Why not? If you have a fairly complicated function, you might move that logic out into its own named function expression.

    // bad
    [1, 2, 3].map(function (x) {
      const y = x + 1;
      return x * y;
    });
    
    // good
    [1, 2, 3].map((x) => {
      const y = x + 1;
      return x * y;
    });

  • 8.2 If the function body consists of a single statement returning an expression without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a return statement. eslint: arrow-parens, arrow-body-style jscs: disallowParenthesesAroundArrowParam, requireShorthandArrowFunctions

    Why? Syntactic sugar. It reads well when multiple functions are chained together.

    // bad
    [1, 2, 3].map(number => {
      const nextNumber = number + 1;
      `A string containing the ${nextNumber}.`;
    });
    
    // good
    [1, 2, 3].map(number => `A string containing the ${number}.`);
    
    // good
    [1, 2, 3].map((number) => {
      const nextNumber = number + 1;
      return `A string containing the ${nextNumber}.`;
    });
    
    // good
    [1, 2, 3].map((number, index) => ({
      [index]: number,
    }));
    
    // No implicit return with side effects
    function foo(callback) {
      const val = callback();
      if (val === true) {
        // Do something if callback returns true
      }
    }
    
    let bool = false;
    
    // bad
    foo(() => bool = true);
    
    // good
    foo(() => {
      bool = true;
    });

  • 8.3 In case the expression spans over multiple lines, wrap it in parentheses for better readability.

    Why? It shows clearly where the function starts and ends.

    // bad
    ['get', 'post', 'put'].map(httpMethod => Object.prototype.hasOwnProperty.call(
        httpMagicObjectWithAVeryLongName,
        httpMethod,
      )
    );
    
    // good
    ['get', 'post', 'put'].map(httpMethod => (
      Object.prototype.hasOwnProperty.call(
        httpMagicObjectWithAVeryLongName,
        httpMethod,
      )
    ));

  • 8.4 If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the “always” option for eslint or do not include disallowParenthesesAroundArrowParam for jscs. eslint: arrow-parens jscs: disallowParenthesesAroundArrowParam

    Why? Less visual clutter.

    // bad
    [1, 2, 3].map((x) => x * x);
    
    // good
    [1, 2, 3].map(x => x * x);
    
    // good
    [1, 2, 3].map(number => (
      `A long string with the ${number}. It’s so long that we don’t want it to take up space on the .map line!`
    ));
    
    // bad
    [1, 2, 3].map(x => {
      const y = x + 1;
      return x * y;
    });
    
    // good
    [1, 2, 3].map((x) => {
      const y = x + 1;
      return x * y;
    });

  • 8.5 Avoid confusing arrow function syntax (=>) with comparison operators (<=, >=). eslint: no-confusing-arrow

    // bad
    const itemHeight = item => item.height > 256 ? item.largeSize : item.smallSize;
    
    // bad
    const itemHeight = (item) => item.height > 256 ? item.largeSize : item.smallSize;
    
    // good
    const itemHeight = item => (item.height > 256 ? item.largeSize : item.smallSize);
    
    // good
    const itemHeight = (item) => {
      const { height, largeSize, smallSize } = item;
      return height > 256 ? largeSize : smallSize;
    };

⬆ back to top

Classes & Constructors

  • 9.1 Always use class. Avoid manipulating prototype directly.

    Why? class syntax is more concise and easier to reason about.

    // bad
    function Queue(contents = []) {
      this.queue = [...contents];
    }
    Queue.prototype.pop = function () {
      const value = this.queue[0];
      this.queue.splice(0, 1);
      return value;
    };
    
    // good
    class Queue {
      constructor(contents = []) {
        this.queue = [...contents];
      }
      pop() {
        const value = this.queue[0];
        this.queue.splice(0, 1);
        return value;
      }
    }

  • 9.2 Use extends for inheritance.

    Why? It is a built-in way to inherit prototype functionality without breaking instanceof.

    // bad
    const inherits = require('inherits');
    function PeekableQueue(contents) {
      Queue.apply(this, contents);
    }
    inherits(PeekableQueue, Queue);
    PeekableQueue.prototype.peek = function () {
      return this.queue[0];
    };
    
    // good
    class PeekableQueue extends Queue {
      peek() {
        return this.queue[0];
      }
    }

  • 9.3 Methods can return this to help with method chaining.

    // bad
    Jedi.prototype.jump = function () {
      this.jumping = true;
      return true;
    };
    
    Jedi.prototype.setHeight = function (height) {
      this.height = height;
    };
    
    const luke = new Jedi();
    luke.jump(); // => true
    luke.setHeight(20); // => undefined
    
    // good
    class Jedi {
      jump() {
        this.jumping = true;
        return this;
      }
    
      setHeight(height) {
        this.height = height;
        return this;
      }
    }
    
    const luke = new Jedi();
    
    luke.jump()
      .setHeight(20);

  • 9.4 It’s okay to write a custom toString() method, just make sure it works successfully and causes no side effects.

    class Jedi {
      constructor(options = {}) {
        this.name = options.name || 'no name';
      }
    
      getName() {
        return this.name;
      }
    
      toString() {
        return `Jedi - ${this.getName()}`;
      }
    }

  • 9.5 Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. eslint: no-useless-constructor

    // bad
    class Jedi {
      constructor() {}
    
      getName() {
        return this.name;
      }
    }
    
    // bad
    class Rey extends Jedi {
      constructor(...args) {
        super(...args);
      }
    }
    
    // good
    class Rey extends Jedi {
      constructor(...args) {
        super(...args);
        this.name = 'Rey';
      }
    }

  • 9.6 Avoid duplicate class members. eslint: no-dupe-class-members

    Why? Duplicate class member declarations will silently prefer the last one - having duplicates is almost certainly a bug.

    // bad
    class Foo {
      bar() { return 1; }
      bar() { return 2; }
    }
    
    // good
    class Foo {
      bar() { return 1; }
    }
    
    // good
    class Foo {
      bar() { return 2; }
    }

⬆ back to top

Modules

  • 10.1 Always use modules (import/export) over a non-standard module system. You can always transpile to your preferred module system.

    Why? Modules are the future, let’s start using the future now.

    // bad
    const AirbnbStyleGuide = require('./AirbnbStyleGuide');
    module.exports = AirbnbStyleGuide.es6;
    
    // ok
    import AirbnbStyleGuide from './AirbnbStyleGuide';
    export default AirbnbStyleGuide.es6;
    
    // best
    import { es6 } from './AirbnbStyleGuide';
    export default es6;

  • 10.2 Do not use wildcard imports.

    Why? This makes sure you have a single default export.

    // bad
    import * as AirbnbStyleGuide from './AirbnbStyleGuide';
    
    // good
    import AirbnbStyleGuide from './AirbnbStyleGuide';

  • 10.3 And do not export directly from an import.

    Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.

    // bad
    // filename es6.js
    export { es6 as default } from './AirbnbStyleGuide';
    
    // good
    // filename es6.js
    import { es6 } from './AirbnbStyleGuide';
    export default es6;

  • 10.4 Only import from a path in one place. eslint: no-duplicate-imports

    Why? Having multiple lines that import from the same path can make code harder to maintain.

    // bad
    import foo from 'foo';
    // … some other imports … //
    import { named1, named2 } from 'foo';
    
    // good
    import foo, { named1, named2 } from 'foo';
    
    // good
    import foo, {
      named1,
      named2,
    } from 'foo';

  • 10.5 Do not export mutable bindings. eslint: import/no-mutable-exports

    Why? Mutation should be avoided in general, but in particular when exporting mutable bindings. While this technique may be needed for some special cases, in general, only constant references should be exported.

    // bad
    let foo = 3;
    export { foo };
    
    // good
    const foo = 3;
    export { foo };

  • 10.6 In modules with a single export, prefer default export over named export. eslint: import/prefer-default-export

    Why? To encourage more files that only ever export one thing, which is better for readability and maintainability.

    // bad
    export function foo() {}
    
    // good
    export default function foo() {}

  • 10.7 Put all imports above non-import statements. eslint: import/first

    Why? Since imports are hoisted, keeping them all at the top prevents surprising behavior.

    // bad
    import foo from 'foo';
    foo.init();
    
    import bar from 'bar';
    
    // good
    import foo from 'foo';
    import bar from 'bar';
    
    foo.init();

  • 10.8 Multiline imports should be indented just like multiline array and object literals.

    Why? The curly braces follow the same indentation rules as every other curly brace block in the style guide, as do the trailing commas.

    // bad
    import {longNameA, longNameB, longNameC, longNameD, longNameE} from 'path';
    
    // good
    import {
      longNameA,
      longNameB,
      longNameC,
      longNameD,
      longNameE,
    } from 'path';

  • 10.9 Disallow Webpack loader syntax in module import statements. eslint: import/no-webpack-loader-syntax

    Why? Since using Webpack syntax in the imports couples the code to a module bundler. Prefer using the loader syntax in webpack.config.js.

    // bad
    import fooSass from 'css!sass!foo.scss';
    import barCss from 'style!css!bar.css';
    
    // good
    import fooSass from 'foo.scss';
    import barCss from 'bar.css';

⬆ back to top

Iterators and Generators

  • 11.1 Don’t use iterators. Prefer JavaScript’s higher-order functions instead of loops like for-in or for-of. eslint: no-iterator no-restricted-syntax

    Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.

    Use map() / every() / filter() / find() / findIndex() / reduce() / some() / ... to iterate over arrays, and Object.keys() / Object.values() / Object.entries() to produce arrays so you can iterate over objects.

    const numbers = [1, 2, 3, 4, 5];
    
    // bad
    let sum = 0;
    for (let num of numbers) {
      sum += num;
    }
    sum === 15;
    
    // good
    let sum = 0;
    numbers.forEach((num) => {
      sum += num;
    });
    sum === 15;
    
    // best (use the functional force)
    const sum = numbers.reduce((total, num) => total + num, 0);
    sum === 15;
    
    // bad
    const increasedByOne = [];
    for (let i = 0; i < numbers.length; i++) {
      increasedByOne.push(numbers[i] + 1);
    }
    
    // good
    const increasedByOne = [];
    numbers.forEach((num) => {
      increasedByOne.push(num + 1);
    });
    
    // best (keeping it functional)
    const increasedByOne = numbers.map(num => num + 1);

  • 11.2 Don’t use generators for now.

    Why? They don’t transpile well to ES5.

  • 11.3 If you must use generators, or if you disregard our advice, make sure their function signature is spaced properly. eslint: generator-star-spacing

    Why? function and * are part of the same conceptual keyword - * is not a modifier for function, function* is a unique construct, different from function.

    // bad
    function * foo() {
      // ...
    }
    
    // bad
    const bar = function * () {
      // ...
    };
    
    // bad
    const baz = function *() {
      // ...
    };
    
    // bad
    const quux = function*() {
      // ...
    };
    
    // bad
    function*foo() {
      // ...
    }
    
    // bad
    function *foo() {
      // ...
    }
    
    // very bad
    function
    *
    foo() {
      // ...
    }
    
    // very bad
    const wat = function
    *
    () {
      // ...
    };
    
    // good
    function* foo() {
      // ...
    }
    
    // good
    const foo = function* () {
      // ...
    };

⬆ back to top

Properties

  • 12.1 Use dot notation when accessing properties. eslint: dot-notation jscs: requireDotNotation

    const luke = {
      jedi: true,
      age: 28,
    };
    
    // bad
    const isJedi = luke['jedi'];
    
    // good
    const isJedi = luke.jedi;

  • 12.2 Use bracket notation [] when accessing properties with a variable.

    const luke = {
      jedi: true,
      age: 28,
    };
    
    function getProp(prop) {
      return luke[prop];
    }
    
    const isJedi = getProp('jedi');

  • 12.3 Use exponentiation operator ** when calculating exponentiations. eslint: no-restricted-properties.

    // bad
    const binary = Math.pow(2, 10);
    
    // good
    const binary = 2 ** 10;

⬆ back to top

Variables

  • 13.1 Always use const or let to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: no-undef prefer-const

    // bad
    superPower = new SuperPower();
    
    // good
    const superPower = new SuperPower();

  • 13.2 Use one const or let declaration per variable. eslint: one-var jscs: disallowMultipleVarDecl

    Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a ; for a , or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.

    // bad
    const items = getItems(),
        goSportsTeam = true,
        dragonball = 'z';
    
    // bad
    // (compare to above, and try to spot the mistake)
    const items = getItems(),
        goSportsTeam = true;
        dragonball = 'z';
    
    // good
    const items = getItems();
    const goSportsTeam = true;
    const dragonball = 'z';

  • 13.3 Group all your consts and then group all your lets.

    Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.

    // bad
    let i, len, dragonball,
        items = getItems(),
        goSportsTeam = true;
    
    // bad
    let i;
    const items = getItems();
    let dragonball;
    const goSportsTeam = true;
    let len;
    
    // good
    const goSportsTeam = true;
    const items = getItems();
    let dragonball;
    let i;
    let length;

  • 13.4 Assign variables where you need them, but place them in a reasonable place.

    Why? let and const are block scoped and not function scoped.

    // bad - unnecessary function call
    function checkName(hasName) {
      const name = getName();
    
      if (hasName === 'test') {
        return false;
      }
    
      if (name === 'test') {
        this.setName('');
        return false;
      }
    
      return name;
    }
    
    // good
    function checkName(hasName) {
      if (hasName === 'test') {
        return false;
      }
    
      const name = getName();
    
      if (name === 'test') {
        this.setName('');
        return false;
      }
    
      return name;
    }

  • 13.5 Don’t chain variable assignments. eslint: no-multi-assign

    Why? Chaining variable assignments creates implicit global variables.

    // bad
    (function example() {
      // JavaScript interprets this as
      // let a = ( b = ( c = 1 ) );
      // The let keyword only applies to variable a; variables b and c become
      // global variables.
      let a = b = c = 1;
    }());
    
    console.log(a); // throws ReferenceError
    console.log(b); // 1
    console.log(c); // 1
    
    // good
    (function example() {
      let a = 1;
      let b = a;
      let c = a;
    }());
    
    console.log(a); // throws ReferenceError
    console.log(b); // throws ReferenceError
    console.log(c); // throws ReferenceError
    
    // the same applies for `const`

  • 13.6 Avoid using unary increments and decrements (++, --). eslint no-plusplus

    Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like num += 1 instead of num++ or num ++. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.

    // bad
    
    const array = [1, 2, 3];
    let num = 1;
    num++;
    --num;
    
    let sum = 0;
    let truthyCount = 0;
    for (let i = 0; i < array.length; i++) {
      let value = array[i];
      sum += value;
      if (value) {
        truthyCount++;
      }
    }
    
    // good
    
    const array = [1, 2, 3];
    let num = 1;
    num += 1;
    num -= 1;
    
    const sum = array.reduce((a, b) => a + b, 0);
    const truthyCount = array.filter(Boolean).length;

  • 13.7 Avoid linebreaks before or after = in an assignment. If your assignment violates max-len, surround the value in parens. eslint operator-linebreak.

    Why? Linebreaks surrounding = can obfuscate the value of an assignment.

    // bad
    const foo =
      superLongLongLongLongLongLongLongLongFunctionName();
    
    // bad
    const foo
      = 'superLongLongLongLongLongLongLongLongString';
    
    // good
    const foo = (
      superLongLongLongLongLongLongLongLongFunctionName()
    );
    
    // good
    const foo = 'superLongLongLongLongLongLongLongLongString';

⬆ back to top

Hoisting

  • 14.1 var declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. const and let declarations are blessed with a new concept called Temporal Dead Zones (TDZ). It’s important to know why typeof is no longer safe.

    // we know this wouldn’t work (assuming there
    // is no notDefined global variable)
    function example() {
      console.log(notDefined); // => throws a ReferenceError
    }
    
    // creating a variable declaration after you
    // reference the variable will work due to
    // variable hoisting. Note: the assignment
    // value of `true` is not hoisted.
    function example() {
      console.log(declaredButNotAssigned); // => undefined
      var declaredButNotAssigned = true;
    }
    
    // the interpreter is hoisting the variable
    // declaration to the top of the scope,
    // which means our example could be rewritten as:
    function example() {
      let declaredButNotAssigned;
      console.log(declaredButNotAssigned); // => undefined
      declaredButNotAssigned = true;
    }
    
    // using const and let
    function example() {
      console.log(declaredButNotAssigned); // => throws a ReferenceError
      console.log(typeof declaredButNotAssigned); // => throws a ReferenceError
      const declaredButNotAssigned = true;
    }

  • 14.2 Anonymous function expressions hoist their variable name, but not the function assignment.

    function example() {
      console.log(anonymous); // => undefined
    
      anonymous(); // => TypeError anonymous is not a function
    
      var anonymous = function () {
        console.log('anonymous function expression');
      };
    }

  • 14.3 Named function expressions hoist the variable name, not the function name or the function body.

    function example() {
      console.log(named); // => undefined
    
      named(); // => TypeError named is not a function
    
      superPower(); // => ReferenceError superPower is not defined
    
      var named = function superPower() {
        console.log('Flying');
      };
    }
    
    // the same is true when the function name
    // is the same as the variable name.
    function example() {
      console.log(named); // => undefined
    
      named(); // => TypeError named is not a function
    
      var named = function named() {
        console.log('named');
      };
    }

  • 14.4 Function declarations hoist their name and the function body.

    function example() {
      superPower(); // => Flying
    
      function superPower() {
        console.log('Flying');
      }
    }
  • For more information refer to JavaScript Scoping & Hoisting by Ben Cherry.

⬆ back to top

Comparison Operators & Equality

  • 15.1 Use === and !== over == and !=. eslint: eqeqeq

  • 15.2 Conditional statements such as the if statement evaluate their expression using coercion with the ToBoolean abstract method and always follow these simple rules:

    • Objects evaluate to true
    • Undefined evaluates to false
    • Null evaluates to false
    • Booleans evaluate to the value of the boolean
    • Numbers evaluate to false if +0, -0, or NaN, otherwise true
    • Strings evaluate to false if an empty string '', otherwise true
    if ([0] && []) {
      // true
      // an array (even an empty one) is an object, objects will evaluate to true
    }

  • 15.3 Use shortcuts for booleans, but explicit comparisons for strings and numbers.

    // bad
    if (isValid === true) {
      // ...
    }
    
    // good
    if (isValid) {
      // ...
    }
    
    // bad
    if (name) {
      // ...
    }
    
    // good
    if (name !== '') {
      // ...
    }
    
    // bad
    if (collection.length) {
      // ...
    }
    
    // good
    if (collection.length > 0) {
      // ...
    }

  • 15.5 Use braces to create blocks in case and default clauses that contain lexical declarations (e.g. let, const, function, and class). eslint: no-case-declarations

    Why? Lexical declarations are visible in the entire switch block but only get initialized when assigned, which only happens when its case is reached. This causes problems when multiple case clauses attempt to define the same thing.

    // bad
    switch (foo) {
      case 1:
        let x = 1;
        break;
      case 2:
        const y = 2;
        break;
      case 3:
        function f() {
          // ...
        }
        break;
      default:
        class C {}
    }
    
    // good
    switch (foo) {
      case 1: {
        let x = 1;
        break;
      }
      case 2: {
        const y = 2;
        break;
      }
      case 3: {
        function f() {
          // ...
        }
        break;
      }
      case 4:
        bar();
        break;
      default: {
        class C {}
      }
    }

  • 15.6 Ternaries should not be nested and generally be single line expressions. eslint: no-nested-ternary

    // bad
    const foo = maybe1 > maybe2
      ? "bar"
      : value1 > value2 ? "baz" : null;
    
    // split into 2 separated ternary expressions
    const maybeNull = value1 > value2 ? 'baz' : null;
    
    // better
    const foo = maybe1 > maybe2
      ? 'bar'
      : maybeNull;
    
    // best
    const foo = maybe1 > maybe2 ? 'bar' : maybeNull;

  • 15.7 Avoid unneeded ternary statements. eslint: no-unneeded-ternary

    // bad
    const foo = a ? a : b;
    const bar = c ? true : false;
    const baz = c ? false : true;
    
    // good
    const foo = a || b;
    const bar = !!c;
    const baz = !c;

  • 15.8 When mixing operators, enclose them in parentheses. The only exception is the standard arithmetic operators (+, -, *, & /) since their precedence is broadly understood. eslint: no-mixed-operators

    Why? This improves readability and clarifies the developer’s intention.

    // bad
    const foo = a && b < 0 || c > 0 || d + 1 === 0;
    
    // bad
    const bar = a ** b - 5 % d;
    
    // bad
    // one may be confused into thinking (a || b) && c
    if (a || b && c) {
      return d;
    }
    
    // good
    const foo = (a && b < 0) || c > 0 || (d + 1 === 0);
    
    // good
    const bar = (a ** b) - (5 % d);
    
    // good
    if (a || (b && c)) {
      return d;
    }
    
    // good
    const bar = a + b / c * d;

⬆ back to top

Blocks

  • 16.1 Use braces with all multi-line blocks. eslint: nonblock-statement-body-position

    // bad
    if (test)
      return false;
    
    // good
    if (test) return false;
    
    // good
    if (test) {
      return false;
    }
    
    // bad
    function foo() { return false; }
    
    // good
    function bar() {
      return false;
    }

  • 16.2 If you're using multi-line blocks with if and else, put else on the same line as your if block’s closing brace. eslint: brace-style jscs: disallowNewlineBeforeBlockStatements

    // bad
    if (test) {
      thing1();
      thing2();
    }
    else {
      thing3();
    }
    
    // good
    if (test) {
      thing1();
      thing2();
    } else {
      thing3();
    }

  • 16.3 If an if block always executes a return statement, the subsequent else block is unnecessary. A return in an else if block following an if block that contains a return can be separated into multiple if blocks. eslint: no-else-return

    // bad
    function foo() {
      if (x) {
        return x;
      } else {
        return y;
      }
    }
    
    // bad
    function cats() {
      if (x) {
        return x;
      } else if (y) {
        return y;
      }
    }
    
    // bad
    function dogs() {
      if (x) {
        return x;
      } else {
        if (y) {
          return y;
        }
      }
    }
    
    // good
    function foo() {
      if (x) {
        return x;
      }
    
      return y;
    }
    
    // good
    function cats() {
      if (x) {
        return x;
      }
    
      if (y) {
        return y;
      }
    }
    
    //good
    function dogs(x) {
      if (x) {
        if (z) {
          return y;
        }
      } else {
        return z;
      }
    }

⬆ back to top

Control Statements

  • 17.1 In case your control statement (if, while etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. The logical operator should begin the line.

    Why? Requiring operators at the beginning of the line keeps the operators aligned and follows a pattern similar to method chaining. This also improves readability by making it easier to visually follow complex logic.

    // bad
    if ((foo === 123 || bar === 'abc') && doesItLookGoodWhenItBecomesThatLong() && isThisReallyHappening()) {
      thing1();
    }
    
    // bad
    if (foo === 123 &&
      bar === 'abc') {
      thing1();
    }
    
    // bad
    if (foo === 123
      && bar === 'abc') {
      thing1();
    }
    
    // bad
    if (
      foo === 123 &&
      bar === 'abc'
    ) {
      thing1();
    }
    
    // good
    if (
      foo === 123
      && bar === 'abc'
    ) {
      thing1();
    }
    
    // good
    if (
      (foo === 123 || bar === 'abc')
      && doesItLookGoodWhenItBecomesThatLong()
      && isThisReallyHappening()
    ) {
      thing1();
    }
    
    // good
    if (foo === 123 && bar === 'abc') {
      thing1();
    }

  • 17.2 Don't use selection operators in place of control statements.

    // bad
    !isRunning && startRunning();
    
    // good
    if (!isRunning) {
      startRunning();
    }

⬆ back to top

Comments

  • 18.1 Use /** ... */ for multi-line comments.

    // bad
    // make() returns a new element
    // based on the passed in tag name
    //
    // @param {String} tag
    // @return {Element} element
    function make(tag) {
    
      // ...
    
      return element;
    }
    
    // good
    /**
     * make() returns a new element
     * based on the passed-in tag name
     */
    function make(tag) {
    
      // ...
    
      return element;
    }

  • 18.2 Use // for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it’s on the first line of a block.

    // bad
    const active = true;  // is current tab
    
    // good
    // is current tab
    const active = true;
    
    // bad
    function getType() {
      console.log('fetching type...');
      // set the default type to 'no type'
      const type = this.type || 'no type';
    
      return type;
    }
    
    // good
    function getType() {
      console.log('fetching type...');
    
      // set the default type to 'no type'
      const type = this.type || 'no type';
    
      return type;
    }
    
    // also good
    function getType() {
      // set the default type to 'no type'
      const type = this.type || 'no type';
    
      return type;
    }

  • 18.3 Start all comments with a space to make it easier to read. eslint: spaced-comment

    // bad
    //is current tab
    const active = true;
    
    // good
    // is current tab
    const active = true;
    
    // bad
    /**
     *make() returns a new element
     *based on the passed-in tag name
     */
    function make(tag) {
    
      // ...
    
      return element;
    }
    
    // good
    /**
     * make() returns a new element
     * based on the passed-in tag name
     */
    function make(tag) {
    
      // ...
    
      return element;
    }

  • 18.4 Prefixing your comments with FIXME or TODO helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are FIXME: -- need to figure this out or TODO: -- need to implement.

  • 18.5 Use // FIXME: to annotate problems.

    class Calculator extends Abacus {
      constructor() {
        super();
    
        // FIXME: shouldn’t use a global here
        total = 0;
      }
    }

  • 18.6 Use // TODO: to annotate solutions to problems.

    class Calculator extends Abacus {
      constructor() {
        super();
    
        // TODO: total should be configurable by an options param
        this.total = 0;
      }
    }

⬆ back to top

Whitespace

  • 19.1 Use soft tabs (space character) set to 2 spaces. eslint: indent jscs: validateIndentation

    // bad
    function foo() {
    ∙∙∙∙let name;
    }
    
    // bad
    function bar() {
    ∙let name;
    }
    
    // good
    function baz() {
    ∙∙let name;
    }

  • 19.2 Place 1 space before the leading brace. eslint: space-before-blocks jscs: requireSpaceBeforeBlockStatements

    // bad
    function test(){
      console.log('test');
    }
    
    // good
    function test() {
      console.log('test');
    }
    
    // bad
    dog.set('attr',{
      age: '1 year',
      breed: 'Bernese Mountain Dog',
    });
    
    // good
    dog.set('attr', {
      age: '1 year',
      breed: 'Bernese Mountain Dog',
    });

  • 19.3 Place 1 space before the opening parenthesis in control statements (if, while etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: keyword-spacing jscs: requireSpaceAfterKeywords

    // bad
    if(isJedi) {
      fight ();
    }
    
    // good
    if (isJedi) {
      fight();
    }
    
    // bad
    function fight () {
      console.log ('Swooosh!');
    }
    
    // good
    function fight() {
      console.log('Swooosh!');
    }

  • 19.5 End files with a single newline character. eslint: eol-last

    // bad
    import { es6 } from './AirbnbStyleGuide';
      // ...
    export default es6;
    // bad
    import { es6 } from './AirbnbStyleGuide';
      // ...
    export default es6;↵
    ↵
    // good
    import { es6 } from './AirbnbStyleGuide';
      // ...
    export default es6;↵

  • 19.6 Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which emphasizes that the line is a method call, not a new statement. eslint: newline-per-chained-call no-whitespace-before-property

    // bad
    $('#items').find('.selected').highlight().end().find('.open').updateCount();
    
    // bad
    $('#items').
      find('.selected').
        highlight().
        end().
      find('.open').
        updateCount();
    
    // good
    $('#items')
      .find('.selected')
        .highlight()
        .end()
      .find('.open')
        .updateCount();
    
    // bad
    const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
        .attr('width', (radius + margin) * 2).append('svg:g')
        .attr('transform', `translate(${radius + margin},${radius + margin})`)
        .call(tron.led);
    
    // good
    const leds = stage.selectAll('.led')
        .data(data)
      .enter().append('svg:svg')
        .classed('led', true)
        .attr('width', (radius + margin) * 2)
      .append('svg:g')
        .attr('transform', `translate(${radius + margin},${radius + margin})`)
        .call(tron.led);
    
    // good
    const leds = stage.selectAll('.led').data(data);

  • 19.7 Leave a blank line after blocks and before the next statement. jscs: requirePaddingNewLinesAfterBlocks

    // bad
    if (foo) {
      return bar;
    }
    return baz;
    
    // good
    if (foo) {
      return bar;
    }
    
    return baz;
    
    // bad
    const obj = {
      foo() {
      },
      bar() {
      },
    };
    return obj;
    
    // good
    const obj = {
      foo() {
      },
    
      bar() {
      },
    };
    
    return obj;
    
    // bad
    const arr = [
      function foo() {
      },
      function bar() {
      },
    ];
    return arr;
    
    // good
    const arr = [
      function foo() {
      },
    
      function bar() {
      },
    ];
    
    return arr;

  • 19.8 Do not pad your blocks with blank lines. eslint: padded-blocks jscs: disallowPaddingNewlinesInBlocks

    // bad
    function bar() {
    
      console.log(foo);
    
    }
    
    // bad
    if (baz) {
    
      console.log(qux);
    } else {
      console.log(foo);
    
    }
    
    // bad
    class Foo {
    
      constructor(bar) {
        this.bar = bar;
      }
    }
    
    // good
    function bar() {
      console.log(foo);
    }
    
    // good
    if (baz) {
      console.log(qux);
    } else {
      console.log(foo);
    }

  • 19.9 Do not add spaces inside parentheses. eslint: space-in-parens jscs: disallowSpacesInsideParentheses

    // bad
    function bar( foo ) {
      return foo;
    }
    
    // good
    function bar(foo) {
      return foo;
    }
    
    // bad
    if ( foo ) {
      console.log(foo);
    }
    
    // good
    if (foo) {
      console.log(foo);
    }

  • 19.12 Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per above, long strings are exempt from this rule, and should not be broken up. eslint: max-len jscs: maximumLineLength

    Why? This ensures readability and maintainability.

    // bad
    const foo = jsonData && jsonData.foo && jsonData.foo.bar && jsonData.foo.bar.baz && jsonData.foo.bar.baz.quux && jsonData.foo.bar.baz.quux.xyzzy;
    
    // bad
    $.ajax({ method: 'POST', url: 'https://airbnb.com/', data: { name: 'John' } }).done(() => console.log('Congratulations!')).fail(() => console.log('You have failed this city.'));
    
    // good
    const foo = jsonData
      && jsonData.foo
      && jsonData.foo.bar
      && jsonData.foo.bar.baz
      && jsonData.foo.bar.baz.quux
      && jsonData.foo.bar.baz.quux.xyzzy;
    
    // good
    $.ajax({
      method: 'POST',
      url: 'https://airbnb.com/',
      data: { name: 'John' },
    })
      .done(() => console.log('Congratulations!'))
      .fail(() => console.log('You have failed this city.'));

⬆ back to top

Commas

  • 20.1 Leading commas: Nope. eslint: comma-style jscs: requireCommaBeforeLineBreak

    // bad
    const story = [
        once
      , upon
      , aTime
    ];
    
    // good
    const story = [
      once,
      upon,
      aTime,
    ];
    
    // bad
    const hero = {
        firstName: 'Ada'
      , lastName: 'Lovelace'
      , birthYear: 1815
      , superPower: 'computers'
    };
    
    // good
    const hero = {
      firstName: 'Ada',
      lastName: 'Lovelace',
      birthYear: 1815,
      superPower: 'computers',
    };

  • 20.2 Additional trailing comma: Yup. eslint: comma-dangle jscs: requireTrailingComma

    Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the trailing comma problem in legacy browsers.

    // bad - git diff without trailing comma
    const hero = {
         firstName: 'Florence',
    -    lastName: 'Nightingale'
    +    lastName: 'Nightingale',
    +    inventorOf: ['coxcomb chart', 'modern nursing']
    };
    
    // good - git diff with trailing comma
    const hero = {
         firstName: 'Florence',
         lastName: 'Nightingale',
    +    inventorOf: ['coxcomb chart', 'modern nursing'],
    };
    // bad
    const hero = {
      firstName: 'Dana',
      lastName: 'Scully'
    };
    
    const heroes = [
      'Batman',
      'Superman'
    ];
    
    // good
    const hero = {
      firstName: 'Dana',
      lastName: 'Scully',
    };
    
    const heroes = [
      'Batman',
      'Superman',
    ];
    
    // bad
    function createHero(
      firstName,
      lastName,
      inventorOf
    ) {
      // does nothing
    }
    
    // good
    function createHero(
      firstName,
      lastName,
      inventorOf,
    ) {
      // does nothing
    }
    
    // good (note that a comma must not appear after a "rest" element)
    function createHero(
      firstName,
      lastName,
      inventorOf,
      ...heroArgs
    ) {
      // does nothing
    }
    
    // bad
    createHero(
      firstName,
      lastName,
      inventorOf
    );
    
    // good
    createHero(
      firstName,
      lastName,
      inventorOf,
    );
    
    // good (note that a comma must not appear after a "rest" element)
    createHero(
      firstName,
      lastName,
      inventorOf,
      ...heroArgs
    );

⬆ back to top

Semicolons

  • 21.1 Yup. eslint: semi jscs: requireSemicolons

    Why? When JavaScript encounters a line break without a semicolon, it uses a set of rules called Automatic Semicolon Insertion to determine whether or not it should regard that line break as the end of a statement, and (as the name implies) place a semicolon into your code before the line break if it thinks so. ASI contains a few eccentric behaviors, though, and your code will break if JavaScript misinterprets your line break. These rules will become more complicated as new features become a part of JavaScript. Explicitly terminating your statements and configuring your linter to catch missing semicolons will help prevent you from encountering issues.

    // bad - raises exception
    const luke = {}
    const leia = {}
    [luke, leia].forEach(jedi => jedi.father = 'vader')
    
    // bad - raises exception
    const reaction = "No! That's impossible!"
    (async function meanwhileOnTheFalcon() {
      // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
      // ...
    }())
    
    // bad - returns `undefined` instead of the value on the next line - always happens when `return` is on a line by itself because of ASI!
    function foo() {
      return
        'search your feelings, you know it to be foo'
    }
    
    // good
    const luke = {};
    const leia = {};
    [luke, leia].forEach((jedi) => {
      jedi.father = 'vader';
    });
    
    // good
    const reaction = "No! That's impossible!";
    (async function meanwhileOnTheFalcon() {
      // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
      // ...
    }());
    
    // good
    function foo() {
      return 'search your feelings, you know it to be foo';
    }

    Read more.

⬆ back to top

Type Casting & Coercion

  • 22.1 Perform type coercion at the beginning of the statement.

  • 22.2 Strings: eslint: no-new-wrappers

    // => this.reviewScore = 9;
    
    // bad
    const totalScore = new String(this.reviewScore); // typeof totalScore is "object" not "string"
    
    // bad
    const totalScore = this.reviewScore + ''; // invokes this.reviewScore.valueOf()
    
    // bad
    const totalScore = this.reviewScore.toString(); // isn’t guaranteed to return a string
    
    // good
    const totalScore = String(this.reviewScore);

  • 22.3 Numbers: Use Number for type casting and parseInt always with a radix for parsing strings. eslint: radix no-new-wrappers

    const inputValue = '4';
    
    // bad
    const val = new Number(inputValue);
    
    // bad
    const val = +inputValue;
    
    // bad
    const val = inputValue >> 0;
    
    // bad
    const val = parseInt(inputValue);
    
    // good
    const val = Number(inputValue);
    
    // good
    const val = parseInt(inputValue, 10);

  • 22.4 If for whatever reason you are doing something wild and parseInt is your bottleneck and need to use Bitshift for performance reasons, leave a comment explaining why and what you're doing.

    // good
    /**
     * parseInt was the reason my code was slow.
     * Bitshifting the String to coerce it to a
     * Number made it a lot faster.
     */
    const val = inputValue >> 0;

  • 22.5 Note: Be careful when using bitshift operations. Numbers are represented as 64-bit values, but bitshift operations always return a 32-bit integer (source). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. Discussion. Largest signed 32-bit Int is 2,147,483,647:

    2147483647 >> 0; // => 2147483647
    2147483648 >> 0; // => -2147483648
    2147483649 >> 0; // => -2147483647

  • 22.6 Booleans: eslint: no-new-wrappers

    const age = 0;
    
    // bad
    const hasAge = new Boolean(age);
    
    // good
    const hasAge = Boolean(age);
    
    // best
    const hasAge = !!age;

⬆ back to top

Naming Conventions

  • 23.1 Avoid single letter names. Be descriptive with your naming. eslint: id-length

    // bad
    function q() {
      // ...
    }
    
    // good
    function query() {
      // ...
    }

  • 23.2 Use camelCase when naming objects, functions, and instances. eslint: camelcase jscs: requireCamelCaseOrUpperCaseIdentifiers

    // bad
    const OBJEcttsssss = {};
    const this_is_my_object = {};
    function c() {}
    
    // good
    const thisIsMyObject = {};
    function thisIsMyFunction() {}

  • 23.3 Use PascalCase only when naming constructors or classes. eslint: new-cap jscs: requireCapitalizedConstructors

    // bad
    function user(options) {
      this.name = options.name;
    }
    
    const bad = new user({
      name: 'nope',
    });
    
    // good
    class User {
      constructor(options) {
        this.name = options.name;
      }
    }
    
    const good = new User({
      name: 'yup',
    });

  • 23.4 Do not use trailing or leading underscores. eslint: no-underscore-dangle jscs: disallowDanglingUnderscores

    Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won’t count as breaking, or that tests aren’t needed. tl;dr: if you want something to be “private”, it must not be observably present.

    // bad
    this.__firstName__ = 'Panda';
    this.firstName_ = 'Panda';
    this._firstName = 'Panda';
    
    // good
    this.firstName = 'Panda';
    
    // good, in environments where WeakMaps are available
    // see https://kangax.github.io/compat-table/es6/#test-WeakMap
    const firstNames = new WeakMap();
    firstNames.set(this, 'Panda');

  • 23.5 Don’t save references to this. Use arrow functions or Function#bind. jscs: disallowNodeTypes

    // bad
    function foo() {
      const self = this;
      return function () {
        console.log(self);
      };
    }
    
    // bad
    function foo() {
      const that = this;
      return function () {
        console.log(that);
      };
    }
    
    // good
    function foo() {
      return () => {
        console.log(this);
      };
    }

  • 23.6 A base filename should exactly match the name of its default export.

    // file 1 contents
    class CheckBox {
      // ...
    }
    export default CheckBox;
    
    // file 2 contents
    export default function fortyTwo() { return 42; }
    
    // file 3 contents
    export default function insideDirectory() {}
    
    // in some other file
    // bad
    import CheckBox from './checkBox'; // PascalCase import/export, camelCase filename
    import FortyTwo from './FortyTwo'; // PascalCase import/filename, camelCase export
    import InsideDirectory from './InsideDirectory'; // PascalCase import/filename, camelCase export
    
    // bad
    import CheckBox from './check_box'; // PascalCase import/export, snake_case filename
    import forty_two from './forty_two'; // snake_case import/filename, camelCase export
    import inside_directory from './inside_directory'; // snake_case import, camelCase export
    import index from './inside_directory/index'; // requiring the index file explicitly
    import insideDirectory from './insideDirectory/index'; // requiring the index file explicitly
    
    // good
    import CheckBox from './CheckBox'; // PascalCase export/import/filename
    import fortyTwo from './fortyTwo'; // camelCase export/import/filename
    import insideDirectory from './insideDirectory'; // camelCase export/import/directory name/implicit "index"
    // ^ supports both insideDirectory.js and insideDirectory/index.js

  • 23.7 Use camelCase when you export-default a function. Your filename should be identical to your function’s name.

    function makeStyleGuide() {
      // ...
    }
    
    export default makeStyleGuide;

  • 23.8 Use PascalCase when you export a constructor / class / singleton / function library / bare object.

    const AirbnbStyleGuide = {
      es6: {
      },
    };
    
    export default AirbnbStyleGuide;

  • 23.9 Acronyms and initialisms should always be all capitalized, or all lowercased.

    Why? Names are for readability, not to appease a computer algorithm.

    // bad
    import SmsContainer from './containers/SmsContainer';
    
    // bad
    const HttpRequests = [
      // ...
    ];
    
    // good
    import SMSContainer from './containers/SMSContainer';
    
    // good
    const HTTPRequests = [
      // ...
    ];
    
    // also good
    const httpRequests = [
      // ...
    ];
    
    // best
    import TextMessageContainer from './containers/TextMessageContainer';
    
    // best
    const requests = [
      // ...
    ];

⬆ back to top

Accessors

  • 24.1 Accessor functions for properties are not required.

  • 24.2 Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').

    // bad
    class Dragon {
      get age() {
        // ...
      }
    
      set age(value) {
        // ...
      }
    }
    
    // good
    class Dragon {
      getAge() {
        // ...
      }
    
      setAge(value) {
        // ...
      }
    }

  • 24.3 If the property/method is a boolean, use isVal() or hasVal().

    // bad
    if (!dragon.age()) {
      return false;
    }
    
    // good
    if (!dragon.hasAge()) {
      return false;
    }

  • 24.4 It’s okay to create get() and set() functions, but be consistent.

    class Jedi {
      constructor(options = {}) {
        const lightsaber = options.lightsaber || 'blue';
        this.set('lightsaber', lightsaber);
      }
    
      set(key, val) {
        this[key] = val;
      }
    
      get(key) {
        return this[key];
      }
    }

⬆ back to top

Events

  • 25.1 When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass an object literal (also known as a "hash") instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:

    // bad
    $(this).trigger('listingUpdated', listing.id);
    
    // ...
    
    $(this).on('listingUpdated', (e, listingID) => {
      // do something with listingID
    });

    prefer:

    // good
    $(this).trigger('listingUpdated', { listingID: listing.id });
    
    // ...
    
    $(this).on('listingUpdated', (e, data) => {
      // do something with data.listingID
    });

⬆ back to top

jQuery

  • 26.1 Prefix jQuery object variables with a $. jscs: requireDollarBeforejQueryAssignment

    // bad
    const sidebar = $('.sidebar');
    
    // good
    const $sidebar = $('.sidebar');
    
    // good
    const $sidebarBtn = $('.sidebar-btn');

  • 26.2 Cache jQuery lookups.

    // bad
    function setSidebar() {
      $('.sidebar').hide();
    
      // ...
    
      $('.sidebar').css({
        'background-color': 'pink',
      });
    }
    
    // good
    function setSidebar() {
      const $sidebar = $('.sidebar');
      $sidebar.hide();
    
      // ...
    
      $sidebar.css({
        'background-color': 'pink',
      });
    }

  • 26.3 For DOM queries use Cascading $('.sidebar ul') or parent > child $('.sidebar > ul'). jsPerf

  • 26.4 Use find with scoped jQuery object queries.

    // bad
    $('ul', '.sidebar').hide();
    
    // bad
    $('.sidebar').find('ul').hide();
    
    // good
    $('.sidebar ul').hide();
    
    // good
    $('.sidebar > ul').hide();
    
    // good
    $sidebar.find('ul').hide();

⬆ back to top

ECMAScript 5 Compatibility

⬆ back to top

ECMAScript 6+ (ES 2015+) Styles

  • 28.1 This is a collection of links to the various ES6+ features.
  1. Arrow Functions
  2. Classes
  3. Object Shorthand
  4. Object Concise
  5. Object Computed Properties
  6. Template Strings
  7. Destructuring
  8. Default Parameters
  9. Rest
  10. Array Spreads
  11. Let and Const
  12. Exponentiation Operator
  13. Iterators and Generators
  14. Modules

  • 28.2 Do not use TC39 proposals that have not reached stage 3.

    Why? They are not finalized, and they are subject to change or to be withdrawn entirely. We want to use JavaScript, and proposals are not JavaScript yet.

⬆ back to top

Standard Library

The Standard Library contains utilities that are functionally broken but remain for legacy reasons.

  • 29.1 Use Number.isNaN instead of global isNaN. eslint: no-restricted-globals

    Why? The global isNaN coerces non-numbers to numbers, returning true for anything that coerces to NaN. If this behavior is desired, make it explicit.

    // bad
    isNaN('1.2'); // false
    isNaN('1.2.3'); // true
    
    // good
    Number.isNaN('1.2.3'); // false
    Number.isNaN(Number('1.2.3')); // true

  • 29.2 Use Number.isFinite instead of global isFinite. eslint: no-restricted-globals

    Why? The global isFinite coerces non-numbers to numbers, returning true for anything that coerces to a finite number. If this behavior is desired, make it explicit.

    // bad
    isFinite('2e3'); // true
    
    // good
    Number.isFinite('2e3'); // false
    Number.isFinite(parseInt('2e3', 10)); // true

⬆ back to top

Testing

  • 30.1 Yup.

    function foo() {
      return true;
    }

  • 30.2 No, but seriously:
    • Whichever testing framework you use, you should be writing tests!
    • Strive to write many small pure functions, and minimize where mutations occur.
    • Be cautious about stubs and mocks - they can make your tests more brittle.
    • We primarily use mocha at Airbnb. tape is also used occasionally for small, separate modules.
    • 100% test coverage is a good goal to strive for, even if it’s not always practical to reach it.
    • Whenever you fix a bug, write a regression test. A bug fixed without a regression test is almost certainly going to break again in the future.

⬆ back to top

Performance

⬆ back to top

Resources

Learning ES6+

Read This

Tools

Other Style Guides

Other Styles

Further Reading

Books

Blogs

Podcasts

⬆ back to top

In the Wild

This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.

⬆ back to top

Translation

This style guide is also available in other languages:

The JavaScript Style Guide Guide

Chat With Us About JavaScript

Contributors

License

(The MIT License)

Copyright (c) 2012 Airbnb

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

⬆ back to top

Amendments

We encourage you to fork this guide and change the rules to fit your team’s style guide. Below, you may list some amendments to the style guide. This allows you to periodically update your style guide without having to deal with merge conflicts.

};

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - robbyrussell/oh-my-zsh: A delightful community-driven (with 1,000+ contributors) framework for managing your zsh configuration. Includes 200+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, php, python, etc), over 140 themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.
Skip to content
A delightful community-driven (with 1,000+ contributors) framework for managing your zsh configuration. Includes 200+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, php, python, etc), over 140 themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.
Shell Other
Switch branches/tags
Nothing to show
Latest commit 37c2d0d Jan 22, 2018

README.md

Oh My Zsh

Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.

Sounds boring. Let's try again.

Oh My Zsh will not make you a 10x developer...but you might feel like one.

Once installed, your terminal shell will become the talk of the town or your money back! With each keystroke in your command prompt, you'll take advantage of the hundreds of powerful plugins and beautiful themes. Strangers will come up to you in cafés and ask you, "that is amazing! are you some sort of genius?"

Finally, you'll begin to get the sort of attention that you have always felt you deserved. ...or maybe you'll use the time that you're saving to start flossing more often. 😬

To learn more, visit ohmyz.sh and follow @ohmyzsh on Twitter.

Getting Started

Prerequisites

Disclaimer: Oh My Zsh works best on macOS and Linux.

  • Unix-like operating system (macOS or Linux)
  • Zsh should be installed (v4.3.9 or more recent). If not pre-installed (zsh --version to confirm), check the following instruction here: Installing ZSH
  • curl or wget should be installed
  • git should be installed

Basic Installation

Oh My Zsh is installed by running one of the following commands in your terminal. You can install this via the command-line with either curl or wget.

via curl

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

via wget

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

Using Oh My Zsh

Plugins

Oh My Zsh comes with a shitload of plugins to take advantage of. You can take a look in the plugins directory and/or the wiki to see what's currently available.

Enabling Plugins

Once you spot a plugin (or several) that you'd like to use with Oh My Zsh, you'll need to enable them in the .zshrc file. You'll find the zshrc file in your $HOME directory. Open it with your favorite text editor and you'll see a spot to list all the plugins you want to load.

vi ~/.zshrc

For example, this might begin to look like this:

plugins=(
  git
  bundler
  dotenv
  osx
  rake
  rbenv
  ruby
)

Using Plugins

Most plugins (should! we're working on this) include a README, which documents how to use them.

Themes

We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We have over one hundred themes now bundled. Most of them have screenshots on the wiki. Check them out!

Selecting a Theme

Robby's theme is the default one. It's not the fanciest one. It's not the simplest one. It's just the right one (for him).

Once you find a theme that you'd like to use, you will need to edit the ~/.zshrc file. You'll see an environment variable (all caps) in there that looks like:

ZSH_THEME="robbyrussell"

To use a different theme, simply change the value to match the name of your desired theme. For example:

ZSH_THEME="agnoster" # (this is one of the fancy ones)
# see https://github.com/robbyrussell/oh-my-zsh/wiki/Themes#agnoster

Note: many themes require installing the Powerline Fonts in order to render properly.

Open up a new terminal window and your prompt should look something like this:

Agnoster theme

In case you did not find a suitable theme for your needs, please have a look at the wiki for more of them.

If you're feeling feisty, you can let the computer select one randomly for you each time you open a new terminal window.

ZSH_THEME="random" # (...please let it be pie... please be some pie..)

And if you want to pick random theme from a list of your favorite themes:

ZSH_THEME_RANDOM_CANDIDATES=(
  "robbyrussell"
  "agnoster"
)

Advanced Topics

If you're the type that likes to get their hands dirty, these sections might resonate.

Advanced Installation

Some users may want to change the default path, or manually install Oh My Zsh.

Custom Directory

The default location is ~/.oh-my-zsh (hidden in your home directory)

If you'd like to change the install directory with the ZSH environment variable, either by running export ZSH=/your/path before installing, or by setting it before the end of the install pipeline like this:

export ZSH="$HOME/.dotfiles/oh-my-zsh"; sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Manual Installation

1. Clone the repository:
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
2. Optionally, backup your existing ~/.zshrc file:
cp ~/.zshrc ~/.zshrc.orig
3. Create a new zsh configuration file

You can create a new zsh config file by copying the template that we have included for you.

cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
4. Change your default shell
chsh -s /bin/zsh
5. Initialize your new zsh configuration

Once you open up a new terminal window, it should load zsh with Oh My Zsh's configuration.

Installation Problems

If you have any hiccups installing, here are a few common fixes.

  • You might need to modify your PATH in ~/.zshrc if you're not able to find some commands after switching to oh-my-zsh.
  • If you installed manually or changed the install location, check the ZSH environment variable in ~/.zshrc.

Custom Plugins and Themes

If you want to override any of the default behaviors, just add a new file (ending in .zsh) in the custom/ directory.

If you have many functions that go well together, you can put them as a XYZ.plugin.zsh file in the custom/plugins/ directory and then enable this plugin.

If you would like to override the functionality of a plugin distributed with Oh My Zsh, create a plugin of the same name in the custom/plugins/ directory and it will be loaded instead of the one in plugins/.

Getting Updates

By default, you will be prompted to check for upgrades every few weeks. If you would like oh-my-zsh to automatically upgrade itself without prompting you, set the following in your ~/.zshrc:

DISABLE_UPDATE_PROMPT=true

To disable automatic upgrades, set the following in your ~/.zshrc:

DISABLE_AUTO_UPDATE=true

Manual Updates

If you'd like to upgrade at any point in time (maybe someone just released a new plugin and you don't want to wait a week?) you just need to run:

upgrade_oh_my_zsh

Magic! 🎉

Uninstalling Oh My Zsh

Oh My Zsh isn't for everyone. We'll miss you, but we want to make this an easy breakup.

If you want to uninstall oh-my-zsh, just run uninstall_oh_my_zsh from the command-line. It will remove itself and revert your previous bash or zsh configuration.

Contributing

I'm far from being a Zsh expert and suspect there are many ways to improve – if you have ideas on how to make the configuration easier to maintain (and faster), don't hesitate to fork and send pull requests!

We also need people to test out pull-requests. So take a look through the open issues and help where you can.

Do NOT send us themes

We have (more than) enough themes for the time being. Please add your theme to the external themes wiki page.

Contributors

Oh My Zsh has a vibrant community of happy users and delightful contributors. Without all the time and help from our contributors, it wouldn't be so awesome.

Thank you so much!

Follow Us

We're on the social media.

Merchandise

We have stickers and shirts for you to show off your love of Oh My Zsh. Again, this will help you become the talk of the town!

License

Oh My Zsh is released under the MIT license.

About Planet Argon

Planet Argon

Oh My Zsh was started by the team at Planet Argon, a Ruby on Rails development agency.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - github/gitignore: A collection of useful .gitignore templates
Skip to content
A collection of useful .gitignore templates
Switch branches/tags
Nothing to show
Latest commit 9e01847 Feb 12, 2018
shiftkey Merge pull request #2601 from davidebeatrici/qt-typo-fix
Qt: typo fix and extra empty lines removal
Permalink
Failed to load latest commit information.
.github adding a template to help streamline review process Feb 27, 2016
Global .idea/**/datasources.xml is now safe to store Feb 7, 2018
Actionscript.gitignore Fix comments on same line causing ignore to break Aug 11, 2017
Ada.gitignore ensure single trailing newline Mar 27, 2014
Agda.gitignore Create Agda.gitignore Aug 15, 2013
Android.gitignore Update Android.gitignore Jan 12, 2018
AppEngine.gitignore Added template for Google App Engine Jan 16, 2015
AppceleratorTitanium.gitignore Added Appcelerator Titanium .gitignore file. Aug 23, 2012
ArchLinuxPackages.gitignore Add .jar, .exe and .msi May 28, 2015
Autotools.gitignore Update Autotools.gitignore Sep 20, 2017
C++.gitignore added prerequisites for C and C++ Jun 29, 2016
C.gitignore Update C.gitignore Oct 31, 2016
CFWheels.gitignore add cfwheels gitignore Feb 22, 2011
CMake.gitignore cmake: add Testing/ log directory Jan 11, 2017
CONTRIBUTING.md Add an explanation to reduce PHP framework clutter Mar 1, 2015
CUDA.gitignore Add CUDA.gitignore Mar 15, 2015
CakePHP.gitignore Update CakePHP.gitignore Nov 20, 2015
ChefCookbook.gitignore Remove lockfiles from Chef template Mar 6, 2014
Clojure.gitignore Add .gitignore for Leiningen projects Apr 8, 2011
CodeIgniter.gitignore Merge branch 'master' into codeigniter3update Feb 2, 2017
CommonLisp.gitignore Update CommonLisp.gitignore Dec 27, 2016
Composer.gitignore Fix link to go to current anchor Oct 27, 2017
Concrete5.gitignore Added .htaccess to concrete5 gitignore Sep 20, 2015
Coq.gitignore Add mllib, mlpack files Oct 11, 2016
CraftCMS.gitignore Removing .DS_Store rule as it is included in global rules Jun 24, 2014
D.gitignore Update D.gitignore Jun 6, 2016
DM.gitignore ensure single trailing newline Mar 27, 2014
Dart.gitignore Add `.dart_tool/` Feb 1, 2018
Delphi.gitignore Add "__recovery" folder. Feb 16, 2016
Drupal.gitignore Add default file, README in libraries and translations in Drupal Aug 20, 2017
EPiServer.gitignore ensure single trailing newline Mar 27, 2014
Eagle.gitignore Added a few common CAM file extensions (#2555) Dec 25, 2017
Elisp.gitignore add final newline Oct 26, 2016
Elixir.gitignore Updates Elixir gitignore file Jul 8, 2017
Elm.gitignore Ignore elm-stuff project-wide Jul 28, 2016
Erlang.gitignore Update Erlang.gitignore Sep 13, 2016
ExpressionEngine.gitignore Merge pull request #488 from nanadevelopment/eeConfigAdd Nov 11, 2013
ExtJs.gitignore Adds some files Sep 7, 2017
Fancy.gitignore ensure single trailing newline Mar 27, 2014
Finale.gitignore ensure single trailing newline Oct 6, 2013
ForceDotCom.gitignore ensure single trailing newline Oct 6, 2013
Fortran.gitignore Link a new fortran template to existing c++ one Jul 16, 2014
FuelPHP.gitignore update FuelPHP.gitignore Dec 8, 2014
GWT.gitignore Adding ".gwt/", "gwt-unitCache/", "www-test" and ".gwt-tmp/" to .giti… Nov 13, 2013
Gcov.gitignore Capitalise initial letter in template filenames for consistency/sorting Jan 7, 2015
GitBook.gitignore Correct URL for NPM URL reference Feb 5, 2015
Go.gitignore Go: Add '*.exe~' to .gitignore Jan 1, 2018
Gradle.gitignore Only ignore the build directory in the same directory as .gitignore f… Jun 24, 2016
Grails.gitignore Adding additional comments Sep 8, 2014
Haskell.gitignore Add cabal.project.local~ to Haskell.gitignore (#2479) Nov 29, 2017
IGORPro.gitignore Create IGORPro.gitignore Dec 3, 2014
Idris.gitignore Add an Idris gitignore Feb 28, 2014
Java.gitignore Add comment for Java .class files Feb 13, 2017
Jboss.gitignore Deployed file ignore Jul 25, 2013
Jekyll.gitignore Update Jekyll.gitignore (#2540) Dec 5, 2017
Joomla.gitignore ignore logs on /administrator/logs/* Mar 24, 2017
Julia.gitignore Julia: ignore deps/deps.jl May 16, 2016
KiCad.gitignore Fixed/Added ignore rules Jan 12, 2017
Kohana.gitignore ensure single trailing newline Oct 6, 2013
Kotlin.gitignore Symlink Kotlin.gitignore to Java.gitignore Feb 25, 2016
LICENSE Use the exact CC-0 license text Oct 28, 2016
LabVIEW.gitignore LabVIEW.gitignore Jun 24, 2014
Laravel.gitignore Merge pull request #2192 from Arsfiqball/update-laravel-patch-2 Jan 29, 2017
Leiningen.gitignore Correct .jar and .class mentions Jul 18, 2016
LemonStand.gitignore ensure single trailing newline Oct 6, 2013
Lilypond.gitignore Add ignore file for lilypond. Feb 22, 2011
Lithium.gitignore The Lithium app should be the root repo folder Sep 1, 2012
Lua.gitignore Added a .gitignore template for Lua based projects. Jan 3, 2015
Magento.gitignore Fixes issue excluding sub directories Mar 9, 2017
Maven.gitignore Reword comment Feb 15, 2017
Mercury.gitignore Mercury.gitignore: Add Mercury.modules Jan 9, 2015
MetaProgrammingSystem.gitignore Grammar/formatting tweak to comments Jun 12, 2014
Nanoc.gitignore Nanoc: Ignore tmp/nanoc/, not tmp/ Aug 29, 2017
Nim.gitignore Create Nim.gitignore Dec 30, 2014
Node.gitignore Update Node.gitignore Jan 1, 2018
OCaml.gitignore Update OCaml.gitignore Sep 15, 2017
Objective-C.gitignore updated link to fastlane docs Feb 15, 2017
Opa.gitignore Added Opa.gitignore Mar 3, 2012
OpenCart.gitignore excluding vqmod cache files and logs Oct 15, 2016
OracleForms.gitignore added gitignore for Oracle Forms development Mar 19, 2012
Packer.gitignore Add a support for packer Mar 9, 2014
Perl.gitignore spelling: utils Nov 8, 2017
Phalcon.gitignore Remove trailing asterisks in Phalcon rules Mar 21, 2014
PlayFramework.gitignore Added /project/project to PlayFramework.gitignore Feb 22, 2017
Plone.gitignore Covered by global vim template Nov 12, 2013
Prestashop.gitignore Update Prestashop.gitignore May 15, 2017
Processing.gitignore Added the processing project Sep 26, 2013
PureScript.gitignore Added .gitignore for PureScript Aug 2, 2015
Python.gitignore Add ignore '.pytest_cache' directory in Unit test section Feb 4, 2018
Qooxdoo.gitignore Add gitignore for qooxdoo apps Feb 22, 2011
Qt.gitignore Qt: Correct typo "QtCtreator" to "QtCreator" Feb 12, 2018
R.gitignore Exclude secret deployment key in rsconnect/ Feb 12, 2018
README.md Fixed typos in README.md Oct 15, 2017
ROS.gitignore Added ignore for files created by `catkin_make_isolated` Jan 26, 2018
Rails.gitignore Ignore node_modules (#2538) Dec 15, 2017
RhodesRhomobile.gitignore Add Rhodes mobile application framework gitignore Nov 9, 2010
Ruby.gitignore Add a brief explanation. Apr 16, 2016
Rust.gitignore Add rustfmt gitignore (#2108) Oct 3, 2016
SCons.gitignore Added SCons.gitignore Dec 17, 2013
Sass.gitignore Add slash to .sass-cache May 15, 2015
Scala.gitignore [Scala] remove external tools excludes. Feb 16, 2017
Scheme.gitignore Add Scheme.gitignore Aug 22, 2015
Scrivener.gitignore Added .gitignore for Scrivener Nov 11, 2013
Sdcc.gitignore ensure single trailing newline Oct 6, 2013
SeamGen.gitignore Update SeamGen.gitignore Jul 31, 2012
SketchUp.gitignore Add gitignore for sketchup backup files. Jan 18, 2012
Smalltalk.gitignore Updated Smalltalk.gitignore Jul 30, 2017
Stella.gitignore Capitalise initial letter in template filenames for consistency/sorting Jan 7, 2015
SugarCRM.gitignore ensure the following ! rules are included May 15, 2017
Swift.gitignore Updating Swift.gitignore with Package.resolved Aug 22, 2017
Symfony.gitignore Revert "Remove Composer's file and directory." Nov 9, 2017
SymphonyCMS.gitignore added symphony and workspace/uploads dir Apr 11, 2012
TeX.gitignore Update TeX.gitignore Jan 16, 2018
Terraform.gitignore Update Terraform.gitignore Oct 29, 2017
Textpattern.gitignore Added Textpattern gitignore Jan 17, 2012
TurboGears2.gitignore Add for TurboGears2 (based off of Python template) Nov 9, 2010
Typo3.gitignore Fix few typos Dec 13, 2015
Umbraco.gitignore Fixed the unignore of folder 'packages' Jan 4, 2018
Unity.gitignore Fixing .gitignore (#2531) Nov 29, 2017
UnrealEngine.gitignore Include Plugins folder Nov 23, 2017
VVVV.gitignore ensure single trailing newline Mar 27, 2014
VisualStudio.gitignore Added "ServiceFabricBackup/" Jan 30, 2018
Waf.gitignore Waf: Be more explicit in patterns Mar 24, 2016
WordPress.gitignore Added Must Use Plugins to gotignore (#2553) Dec 20, 2017
Xojo.gitignore Ignores *.xojo_uistate Sep 14, 2014
Yeoman.gitignore Create Yeoman.gitignore Oct 21, 2013
Yii.gitignore Merge remote-tracking branch 'origin/master' into pr/506 Nov 11, 2013
ZendFramework.gitignore Remove double-spaced lines Sep 12, 2017
Zephir.gitignore Added comments for Zephir Jun 21, 2014

README.md

A collection of .gitignore templates

This is GitHub’s collection of .gitignore file templates. We use this list to populate the .gitignore template choosers available in the GitHub.com interface when creating new repositories and files.

For more information about how .gitignore files work, and how to use them, the following resources are a great place to start:

Folder structure

The files in the root directory are for .gitignore templates that are project specific, such as language or framework specific templates. Global (operating system or editor specific) templates should go into the Global/ directory.

Contributing guidelines

We’d love for you to help us improve this project. To help us keep this collection high quality, we request that contributions adhere to the following guidelines.

  • Provide a link to the application or project’s homepage. Unless it’s extremely popular, there’s a chance the maintainers don’t know about or use the language, framework, editor, app, or project your change applies to.

  • Provide links to documentation supporting the change you’re making. Current, canonical documentation mentioning the files being ignored is best. If documentation isn’t available to support your change, do the best you can to explain what the files being ignored are for.

  • Explain why you’re making a change. Even if it seems self-evident, please take a sentence or two to tell us why your change or addition should happen. It’s especially helpful to articulate why this change applies to everyone who works with the applicable technology, rather than just you or your team.

  • Please consider the scope of your change. If your change is specific to a certain language or framework, then make sure the change is made to the template for that language or framework, rather than to the template for an editor, tool, or operating system.

  • Please only modify one template per pull request. This helps keep pull requests and feedback focused on a specific project or technology.

In general, the more you can do to help us understand the change you’re making, the more likely we’ll be to accept your contribution quickly.

If a template is mostly a list of files installed by a particular version of some software (e.g. a PHP framework) then it's brittle and probably no more helpful than a simple ls. If it's not possible to curate a small set of useful rules, then the template might not be a good fit for this collection.

Please also understand that we can’t list every tool that ever existed. Our aim is to curate a collection of the most common and helpful templates, not to make sure we cover every project possible. If we choose not to include your language, tool, or project, it’s not because it’s not awesome.

Contributing workflow

Here’s how we suggest you go about proposing a change to this project:

  1. Fork this project to your account.
  2. Create a branch for the change you intend to make.
  3. Make your changes to your fork.
  4. Send a pull request from your fork’s branch to our master branch.

Using the web-based interface to make changes is fine too, and will help you by automatically forking the project and prompting to send a pull request too.

License

CC0-1.0.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - facebook/react-native: A framework for building native apps with React.
Skip to content
A framework for building native apps with React.
JavaScript Java Objective-C C++ Objective-C++ HTML Other
Switch branches/tags
Latest commit edb6ca7 Feb 22, 2018
draperunner and facebook-github-bot Fix ESLint warnings using 'yarn lint --fix'
Summary:
Hi! I would like to contribute to React Native, and I am just starting out. I forked the repo and found that it has quite a lot of ESLint warnings – many of which were automatically fixable. This PR is simply the result of running `yarn lint --fix` from the root folder.

Most changes are removing trailing spaces from comments.

Haven't really done any manual testing, since I haven't done any code changes manually. `yarn test` runs fine, `yarn flow` runs fine, `yarn prettier` is satisfied.

N/A

[INTERNAL][MINOR][] - Fix ESLint warnings
Closes #18047

Differential Revision: D7054948

Pulled By: hramos

fbshipit-source-id: d53e692698d1687de5821c3fb5cdb76a5e03b71e
Permalink
Failed to load latest commit information.
.circleci Bump buck to v2018.02.16.01 Feb 16, 2018
.github Update CODEOWNERS Dec 22, 2017
ContainerShip Update license headers for MIT license Feb 17, 2018
IntegrationTests Update license headers for MIT license Feb 17, 2018
Libraries Fix ESLint warnings using 'yarn lint --fix' Feb 22, 2018
RNTester Fix ESLint warnings using 'yarn lint --fix' Feb 22, 2018
React RCTSurface: Support for synchronous waiting for mounting stage Feb 21, 2018
ReactAndroid FabricUIManagerModuleTest setup and testCloneNode Feb 21, 2018
ReactCommon Added default constructor for YGCachedMeasurement Feb 20, 2018
ReactNative Use only native robolectric_test rules. Feb 16, 2018
babel-preset Update to MIT license Feb 17, 2018
bots Fix ESLint warnings using 'yarn lint --fix' Feb 22, 2018
flow-github Fix ESLint warnings using 'yarn lint --fix' Feb 22, 2018
flow Update license headers for MIT license Feb 17, 2018
gradle/wrapper Android - Update Gradle to 2.2.3 Jan 31, 2017
jest fix Flow typing for OSS Feb 19, 2018
keystores Apply auto-formatter for BUCK files in fbandroid. Feb 27, 2017
lib Update license headers for MIT license Feb 17, 2018
local-cli Fix ESLint warnings using 'yarn lint --fix' Feb 22, 2018
react-native-cli Update to MIT license Feb 17, 2018
react-native-git-upgrade Update to MIT license Feb 17, 2018
scripts Move YGStyle to seperate file and add constructors Feb 20, 2018
third-party-podspecs Update to MIT license Feb 17, 2018
.buckconfig update gitignore & fix links May 22, 2017
.buckjavaargs limiting BUCK's memory for CI Feb 1, 2016
.editorconfig Fix indent of .gradle files Oct 19, 2016
.eslintignore Split out docs to their own repo Dec 5, 2017
.eslintrc Fold .eslintrc's into the root eslintrc Feb 15, 2018
.flowconfig @allow-large-files Upgrade xplat/js to Flow v0.66 Feb 17, 2018
.gitattributes Added a .gitattributes file, ensuring that Bash script source files (… Oct 14, 2015
.gitignore Switch e2e to yarn Feb 6, 2018
.npmignore Update .npmignore to include generated bundle file Feb 3, 2017
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Oct 26, 2017
CONTRIBUTING.md Update to MIT license Feb 17, 2018
DockerTests.md Docker Testing Environment for Android & JS Feb 24, 2017
Jenkinsfile Container Testing Updates Apr 12, 2017
LICENSE Update to MIT license Feb 17, 2018
LICENSE-docs More licenses Mar 25, 2015
README.md Update to MIT license Feb 17, 2018
React.podspec Update to MIT license Feb 17, 2018
Releases.md Remove references to Travis Jan 25, 2018
breaking-changes.md DOCS ONLY: Update breaking changes location in breaking-changes.md: m… Feb 3, 2017
build.gradle Update gradle-download-task from 2.0.0 to 3.1.2 to fix boost zip down… Dec 8, 2016
cli.js Update license headers for MIT license Feb 17, 2018
gradlew Update gradle wrapper binary and scripts Sep 9, 2016
gradlew.bat Update gradle wrapper binary and scripts Sep 9, 2016
jest-preset.json mock mp4 files Oct 20, 2017
package.json Upgrade Jest to 22.4.0 to pull fixes for jest-haste-map Feb 22, 2018
react.gradle Better Android Gradle Plugin 3.x integration Feb 17, 2018
rn-cli.config.js Update license headers for MIT license Feb 17, 2018
rn-get-polyfills.js Update license headers for MIT license Feb 17, 2018
runXcodeTests.sh Re-license and rename UIExplorer integration test app as RNTester May 8, 2017
settings.gradle Cleanup settings.gradle Jul 28, 2017
setupBabel.js Update license headers for MIT license Feb 17, 2018

README.md

React Native · Circle CI Status npm version PRs Welcome

Learn once, write anywhere: Build mobile apps with React.

  • Build native mobile apps using JavaScript and React: React Native lets you build mobile apps using only JavaScript. It uses the same design as React, letting you compose a rich mobile UI from declarative components.
  • A React Native app is a real mobile app: With React Native, you don't build a "mobile web app", an "HTML5 app", or a "hybrid app". You build a real mobile app that's indistinguishable from an app built using Objective-C, Java, or Swift. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.
  • Don't waste time recompiling: React Native lets you build your app faster. Instead of recompiling, you can reload your app instantly. With hot reloading, you can even run new code while retaining your application state. Give it a try - it's a magical experience.
  • Use native code when you need to: React Native combines smoothly with components written in Objective-C, Java, or Swift. It's simple to drop down to native code if you need to optimize a few aspects of your application. It's also easy to build part of your app in React Native, and part of your app using native code directly - that's how the Facebook app works.

The focus of React Native is on developer efficiency across all the platforms you care about - learn once, write anywhere. Facebook uses React Native in multiple production apps and will continue investing in React Native.

See the official React Native website for an introduction to React Native.

Supported operating systems are >= Android 4.1 (API 16) and >= iOS 8.0.


Getting Started

Follow the Getting Started guide. The recommended way to install React Native depends on your project. Here you can find short guides for the most common scenarios:


Documentation

The website’s documentation is divided into multiple sections.

Another great way to learn more about the components and APIs included with React Native is to read their source. Look under the Libraries/Components directory for components like ScrollView and TextInput, for example. The RNTester example is also here to demonstrate some of the ways to use these components. From the source you can get an accurate understanding of each component’s behavior and API.

The React Native documentation only discusses the components, APIs and topics specific to React Native (React on iOS and Android). For further documentation on the React API that is shared between React Native and React DOM, refer to the React documentation.


Upgrading

React Native is under active development. See the guide on upgrading React Native to keep your project up-to-date.


Contributing

Read below to learn how you can take part in improving React Native.

Code of Conduct

Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read the full text so that you can understand what actions will and will not be tolerated.

Contributing Guide

Read our contributing guide to learn about our development process, how to propose bug fixes and improvements, and how to build and test your changes to React Native.

Beginner Friendly Bugs

We have a list of beginner friendly issues to help you get your feet wet in the React Native codebase and familiar with our contribution process. This is a great place to get started.


License

React Native is MIT licensed.

React Native documentation is Creative Commons licensed.


You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - jwasham/coding-interview-university: A complete computer science study plan to become a software engineer.
Skip to content
A complete computer science study plan to become a software engineer.
Switch branches/tags
Nothing to show
Latest commit 492d108 Feb 22, 2018
jwasham Merge pull request #309 from adhikariaman01/hotfix/readme-update
Issue-308 Discrete Math CS70 Link updated

README.md

Coding Interview University

I originally created this as a short to-do list of study topics for becoming a software engineer, but it grew to the large list you see today. After going through this study plan, I got hired as a Software Development Engineer at Amazon! You probably won't have to study as much as I did. Anyway, everything you need is here.

The items listed here will prepare you well for in an interview at just about any software company, including the giants: Amazon, Facebook, Google or Microsoft.

Best of luck to you!

Translations:

Translations in progress:

What is it?

This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company.

Coding at the whiteboard - from HBO's Silicon Valley

This is meant for new software engineers or those switching from software/web development to software engineering (where computer science knowledge is required). If you have many years of experience and are claiming many years of software engineering experience, expect a harder interview.

If you have many years of software/web development experience, note that large software companies like Google, Amazon, Facebook and Microsoft view software engineering as different from software/web development, and they require computer science knowledge.

If you want to be a reliability engineer or operations engineer, study more from the optional list (networking, security).


Table of Contents

---------------- Everything below this point is optional ----------------


Why use it?

When I started this project, I didn't know a stack from a heap, didn't know Big-O anything, anything about trees, or how to traverse a graph. If I had to code a sorting algorithm, I can tell ya it wouldn't have been very good. Every data structure I've ever used was built into the language, and I didn't know how they worked under the hood at all. I've never had to manage memory unless a process I was running would give an "out of memory" error, and then I'd have to find a workaround. I've used a few multidimensional arrays in my life and thousands of associative arrays, but I've never created data structures from scratch.

It's a long plan. It may take you months. If you are familiar with a lot of this already it will take you a lot less time.

How to use it

Everything below is an outline, and you should tackle the items in order from top to bottom.

I'm using Github's special markdown flavor, including tasks lists to check progress.

Create a new branch so you can check items like this, just put an x in the brackets: [x]

Fork a branch and follow the commands below

git checkout -b progress

git remote add jwasham https://github.com/jwasham/coding-interview-university

git fetch --all

Mark all boxes with X after you completed your changes

git add .

git commit -m "Marked x"

git rebase jwasham/master

git push --force

More about Github-flavored markdown

Don't feel you aren't smart enough

About Video Resources

Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free.

I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos.
I like using university lectures.

Interview Process & General Interview Prep

Pick One Language for the Interview

You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices:

  • C++
  • Java
  • Python

You could also use these, but read around first. There may be caveats:

  • JavaScript
  • Ruby

You need to be very comfortable in the language and be knowledgeable.

Read more about choices:

See language resources here

You'll see some C, C++, and Python learning included below, because I'm learning. There are a few books involved, see the bottom.

Book List

This is a shorter list than what I used. This is abbreviated to save you time.

Interview Prep

If you have tons of extra time:

Computer Architecture

If short on time:

  • Write Great Code: Volume 1: Understanding the Machine
    • The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief.
    • The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like.
    • These chapters are worth the read to give you a nice foundation:
      • Chapter 2 - Numeric Representation
      • Chapter 3 - Binary Arithmetic and Bit Operations
      • Chapter 4 - Floating-Point Representation
      • Chapter 5 - Character Representation
      • Chapter 6 - Memory Organization and Access
      • Chapter 7 - Composite Data Types and Memory Objects
      • Chapter 9 - CPU Architecture
      • Chapter 10 - Instruction Set Architecture
      • Chapter 11 - Memory Architecture and Organization

If you have more time (I want this book):

Language Specific

You need to choose a language for the interview (see above). Here are my recommendations by language. I don't have resources for all languages. I welcome additions.

If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. You can skip all the video lectures in this project, unless you'd like a review.

Additional language-specific resources here.

C++

I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome.

If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource.

Java

OR:

  • Data Structures and Algorithms in Java
    • by Goodrich, Tamassia, Goldwasser
    • used as optional text for CS intro course at UC Berkeley
    • see my book report on the Python version below. This book covers the same topics.

Python

Optional Books

Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:

  • Algorithm Design Manual (Skiena)

    • As a review and problem recognition
    • The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview.
    • This book has 2 parts:
      • class textbook on data structures and algorithms
        • pros:
          • is a good review as any algorithms textbook would be
          • nice stories from his experiences solving problems in industry and academia
          • code examples in C
        • cons:
          • can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
          • chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
          • don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material.
      • algorithm catalog:
        • this is the real reason you buy this book.
        • about to get to this part. Will update here once I've made my way through it.
    • Can rent it on kindle
    • Answers:
    • Errata
  • Introduction to Algorithms

    • Important: Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently.
    • aka CLR, sometimes CLRS, because Stein was late to the game
  • Programming Pearls

    • The first couple of chapters present clever solutions to programming problems (some very old using data tape) but that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter.
  • "Algorithms and Programming: Problems and Solutions" by Shen

    • A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results.
    • Would rather spend time on coding problems from another book or online coding problems.

Before you Get Started

This list grew over many months, and yes, it kind of got out of hand.

Here are some mistakes I made so you'll have a better experience.

1. You Won't Remember it All

I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going through my notes and making flashcards so I could review.

Read please so you won't make my mistakes:

Retaining Computer Science Knowledge

2. Use Flashcards

To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code. Each card has different formatting.

I made a mobile-first website so I could review on my phone and tablet, wherever I am.

Make your own for free:

Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required.

Note on flashcards: The first time you recognize you know the answer, don't mark it as known. You have to see the same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in your brain.

An alternative to using my flashcard site is Anki, which has been recommended to me numerous times. It uses a repetition system to help you remember. It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms.

My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks @xiewenya)

3. Review, review, review

I keep a set of cheat sheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time.

Take a break from programming problems for a half hour and go through your flashcards.

4. Focus

There are a lot of distractions that can take up valuable time. Focus and concentration are hard.

What you won't see covered

These are prevalent technologies but not part of this study plan:

  • SQL
  • Javascript
  • HTML, CSS, and other front-end technologies

The Daily Plan

Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement.

Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:

  • C - using structs and functions that take a struct * and something else as args.
  • C++ - without using built-in types
  • C++ - using built-in types, like STL's std::list for a linked list
  • Python - using built-in types (to keep practicing Python)
  • and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
  • You may do Java or something else, this is just my thing.

You don't need all these. You need only one language for the interview.

Why code in all of these?

  • Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
  • Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
  • Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)

I may not have time to do all of these for every subject, but I'll try.

You can see my code here:

You don't need to memorize the guts of every algorithm.

Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer.

Prerequisite Knowledge

Algorithmic complexity / Big-O / Asymptotic analysis

Data Structures

More Knowledge

Trees

Sorting

As a summary, here is a visual representation of 15 sorting algorithms. If you need more detail on this subject, see "Sorting" section in Additional Detail on Some Subjects

Graphs

Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.

You'll get more graph practice in Skiena's book (see Books section below) and the interview books

Even More Knowledge

System Design, Scalability, Data Handling


Final Review

This section will have shorter videos that you can watch pretty quickly to review most of the important concepts.
It's nice if you want a refresher often.

Coding Question Practice

Now that you know all the computer science topics above, it's time to practice answering coding problems.

Coding question practice is not about memorizing answers to programming problems.

Why you need to practice doing programming problems:

  • problem recognition, and where the right data structures and algorithms fit in
  • gathering requirements for the problem
  • talking your way through the problem like you will in the interview
  • coding on a whiteboard or paper, not a computer
  • coming up with time and space complexity for your solutions
  • testing your solutions

There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming interview books, too, but I found this outstanding: Algorithm design canvas

No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick.

my sofa whiteboard

Supplemental:

Read and Do Programming Problems (in this order):

See Book List above

Coding exercises/challenges

Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can.

Coding Interview Question Videos:

Challenge sites:

Challenge repos:

Mock Interviews:

Once you're closer to the interview

Your Resume

  • See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed

Be thinking of for when the interview comes

Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. Have a story, not just data, about something you accomplished.

  • Why do you want this job?
  • What's a tough problem you've solved?
  • Biggest challenges faced?
  • Best/worst designs seen?
  • Ideas for improving an existing product.
  • How do you work best, as an individual and as part of a team?
  • Which of your skills or experiences would be assets in the role and why?
  • What did you most enjoy at [job x / project y]?
  • What was the biggest challenge you faced at [job x / project y]?
  • What was the hardest bug you faced at [job x / project y]?
  • What did you learn at [job x / project y]?
  • What would you have done better at [job x / project y]?

Have questions for the interviewer

Some of mine (I already may know answer to but want their opinion or team perspective):
  • How large is your team?
  • What does your dev cycle look like? Do you do waterfall/sprints/agile?
  • Are rushes to deadlines common? Or is there flexibility?
  • How are decisions made in your team?
  • How many meetings do you have per week?
  • Do you feel your work environment helps you concentrate?
  • What are you working on?
  • What do you like about it?
  • What is the work life like?

Once You've Got The Job

Congratulations!

Keep learning.

You're never really done.


*****************************************************************************************************
*****************************************************************************************************

Everything below this point is optional.
By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for
any software engineering job. You'll be a much more well-rounded software engineer.

*****************************************************************************************************
*****************************************************************************************************

Additional Books

Additional Learning

These topics will likely not come up in an interview, but I added them to help you become a well-rounded software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox.

--

Additional Detail on Some Subjects

I added these to reinforce some ideas already presented above, but didn't want to include them
above because it's just too much. It's easy to overdo it on a subject.
You want to get hired in this century, right?

Video Series

Sit back and enjoy. "Netflix and skill" :P

Computer Science Courses

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - angular/angular.js: AngularJS - HTML enhanced for web apps!
Skip to content
AngularJS - HTML enhanced for web apps!
JavaScript HTML Other
Latest commit c0adcc3 Feb 20, 2018
gkalpak refactor($compile): avoid catastrophic backtracking when parsing bind…
…ings

This isn't expected to have any actual impact, since AngularJS is only
intended to be used in the browser (not the server) and for this RegExp
to be exploited by malicious user code the developer would have to have
to give the user rights to execute arbitrary JavaScript code anyway.
Fixing as a general good practice and to avoid encouraging use of a
similar RegExp in other environments where it might actually matter.

Closes #16464
Permalink
Failed to load latest commit information.
.github docs(PULL_REQUEST_TEMPLATE.md): fix broken links in PR template Dec 19, 2017
benchmarks chore(*): get rid of Bower in favor of Yarn aliases & checked-in pack… Jan 8, 2018
css style(css) separate selectors and declarations by new lines Jul 19, 2017
docs docs(misc): add version-support-status page (#16460) Feb 21, 2018
i18n chore(i18n): update CLDR to v30.0.1 Jun 6, 2017
images docs(*): optimize images Sep 21, 2017
lib chore(docs.angular.js): do not break when deploying Feb 12, 2018
logs creating logs/ and tmp/ dirs Oct 29, 2010
scripts chore(docs.angularjs.org): allow crawling but not indexing of partials/ Feb 15, 2018
src refactor($compile): avoid catastrophic backtracking when parsing bind… Feb 21, 2018
test fix($resource): fix interceptors and success/error callbacks Feb 20, 2018
vendor docs(vendor): add readme Jan 8, 2018
.editorconfig chore(.editorconfig): remove settings for ngLocale after change to sc… Oct 31, 2014
.eslintignore chore(*): get rid of Bower in favor of Yarn aliases & checked-in pack… Jan 8, 2018
.eslintrc-base.json chore(eslint): enable `quotes: ["error", "single"]` Aug 10, 2016
.eslintrc-browser.json chore(*): switch from JSHint/JSCS to ESLint Aug 5, 2016
.eslintrc-node.json chore(eslint): allow ES6 for node scripts Feb 12, 2018
.eslintrc-todo.json chore(eslint): enable `quotes: ["error", "single"]` Aug 10, 2016
.eslintrc.json chore(*): switch from JSHint/JSCS to ESLint Aug 5, 2016
.gitattributes chore(*): add .gitattributes with new lines configuration Dec 30, 2014
.gitignore chore(deploy): rename deploy folders Feb 12, 2018
.mailmap chore(*): normalize Vojta's email in .mailmap correctly Nov 22, 2017
.nvmrc build(*): update Node from 6 to 8, update Yarn Dec 7, 2017
.travis.yml chore(deploy): rename deploy folders Feb 12, 2018
CHANGELOG.md docs(changelog): add changes for 1.6.9 Feb 2, 2018
CODE_OF_CONDUCT.md docs(*): add CODE_OF_CONDUCT.md Feb 15, 2018
CONTRIBUTING.md docs(*): remove usage of global grunt-cli Nov 11, 2017
DEVELOPERS.md chore(node): add karma launchers for Edge, IE, and Safari Jan 15, 2018
Gruntfile.js chore(docs.angularjs.org): serve snapshots for googlebot Feb 12, 2018
LICENSE chore(*): update copyright year Jan 5, 2018
README.closure.md docs(*): ensure naming is correct for Angular(JS) versions Jan 25, 2017
README.md docs(misc): add version-support-status page (#16460) Feb 21, 2018
TRIAGING.md chore(*): get rid of Bower in favor of Yarn aliases & checked-in pack… Jan 8, 2018
angularFiles.js chore(*): get rid of Bower in favor of Yarn aliases & checked-in pack… Jan 8, 2018
karma-docs.conf.js refactor(jshint): reduce duplication & test all JS files Jul 8, 2014
karma-jqlite.conf.js test(jqLite): make iframe contents() test less flaky Jul 16, 2014
karma-jquery-2.1.conf.js test(jQuery): Run tests with jQuery 3 Jul 13, 2016
karma-jquery-2.2.conf.js test(jQuery): Run tests with jQuery 3 Jul 13, 2016
karma-jquery.conf-factory.js chore(*): switch from JSHint/JSCS to ESLint Aug 5, 2016
karma-jquery.conf.js test(jQuery): Run tests with jQuery 3 Jul 13, 2016
karma-modules.conf.js fix(modules): allow modules to be loaded in any order when using `ang… Jun 17, 2016
karma-shared.conf.js chore(travis): test on 2 latest Safari versions Jan 11, 2018
package.json chore(eslint): allow ES6 for node scripts Feb 12, 2018
protractor-conf.js chore(travis): use Firefox 47 Jul 22, 2016
protractor-jenkins-conf.js chore(Jenkins): fix e2e tests on Jenkins Jul 11, 2016
protractor-shared-conf.js chore(travis): use Firefox 47 Jul 22, 2016
protractor-travis-conf.js docs(*): ensure naming is correct for Angular(JS) versions Jan 25, 2017
yarn.lock chore(eslint): allow ES6 for node scripts Feb 12, 2018

README.md

AngularJS Build Status

AngularJS lets you write client-side web applications as if you had a smarter browser. It lets you use good old HTML (or HAML, Jade/Pug and friends!) as your template language and lets you extend HTML’s syntax to express your application’s components clearly and succinctly. It automatically synchronizes data from your UI (view) with your JavaScript objects (model) through 2-way data binding. To help you structure your application better and make it easy to test, AngularJS teaches the browser how to do dependency injection and inversion of control.

It also helps with server-side communication, taming async callbacks with promises and deferred objects, and it makes client-side navigation and deep linking with hashbang urls or HTML5 pushState a piece of cake. Best of all? It makes development fun!


AngularJS will be moving to Long Term Support (LTS) mode on July 1st 2018: Find out more
Looking for the new Angular? Go here: https://github.com/angular/angular

Documentation

Go to https://docs.angularjs.org

Contribute

We've set up a separate document for our contribution guidelines.

Develop

We've set up a separate document for developers.

Analytics

What to use AngularJS for and when to use it

AngularJS is the next generation framework where each component is designed to work with every other component in an interconnected way like a well-oiled machine. AngularJS is JavaScript MVC made easy and done right. (Well it is not really MVC, read on, to understand what this means.)

MVC, no, MV* done the right way!

MVC, short for Model-View-Controller, is a design pattern, i.e. how the code should be organized and how the different parts of an application separated for proper readability and debugging. Model is the data and the database. View is the user interface and what the user sees. Controller is the main link between Model and View. These are the three pillars of major programming frameworks present on the market today. On the other hand AngularJS works on MV*, short for Model-View-Whatever. The Whatever is AngularJS's way of telling that you may create any kind of linking between the Model and the View here.

Unlike other frameworks in any programming language, where MVC, the three separate components, each one has to be written and then connected by the programmer, AngularJS helps the programmer by asking him/her to just create these and everything else will be taken care of by AngularJS.

Interconnection with HTML at the root level

AngularJS uses HTML to define the user's interface. AngularJS also enables the programmer to write new HTML tags (AngularJS Directives) and increase the readability and understandability of the HTML code. Directives are AngularJS’s way of bringing additional functionality to HTML. Directives achieve this by enabling us to invent our own HTML elements. This also helps in making the code DRY (Don't Repeat Yourself), which means once created, a new directive can be used anywhere within the application.

HTML is also used to determine the wiring of the app. Special attributes in the HTML determine where to load the app, which components or controllers to use for each element, etc. We specify "what" gets loaded, but not "how". This declarative approach greatly simplifies app development in a sort of WYSIWYG way. Rather than spending time on how the program flows and orchestrating the various moving parts, we simply define what we want and AngularJS will take care of the dependencies.

Data Handling made simple

Data and Data Models in AngularJS are plain JavaScript objects and one can add and change properties directly on it and loop over objects and arrays at will.

Two-way Data Binding

One of AngularJS's strongest features. Two-way Data Binding means that if something changes in the Model, the change gets reflected in the View instantaneously, and the same happens the other way around. This is also referred to as Reactive Programming, i.e. suppose a = b + c is being programmed and after this, if the value of b and/or c is changed then the value of a will be automatically updated to reflect the change. AngularJS uses its "scopes" as a glue between the Model and View and makes these updates in one available for the other.

Less Written Code and Easily Maintainable Code

Everything in AngularJS is created to enable the programmer to end up writing less code that is easily maintainable and readable by any other new person on the team. Believe it or not, one can write a complete working two-way data binded application in less than 10 lines of code. Try and see for yourself!

Testing Ready

AngularJS has Dependency Injection, i.e. it takes care of providing all the necessary dependencies to its controllers and services whenever required. This helps in making the AngularJS code ready for unit testing by making use of mock dependencies created and injected. This makes AngularJS more modular and easily testable thus in turn helping a team create more robust applications.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - electron/electron: Build cross platform desktop apps with JavaScript, HTML, and CSS
Skip to content
Build cross platform desktop apps with JavaScript, HTML, and CSS
C++ JavaScript Objective-C++ Python Objective-C HTML Other
Switch branches/tags
Latest commit 366638b Feb 22, 2018
jkleinsc Merge pull request #12013 from electron/release-fix
Fixes from running 2.0.0-beta.1 release
Permalink
Failed to load latest commit information.
.circleci Set DISPLAY variable for xvfb Jan 17, 2018
.github add typing cat to first PR comment (#11964) Feb 19, 2018
atom Rename api::Window to api::BrowserWindow Feb 22, 2018
brightray Explicitly disable executable stack in all Linux binaries Feb 21, 2018
chromium_src Merge pull request #11595 from YurySolovyov/fileicon-task-scheduler Feb 12, 2018
default_app Replace default_app icon Dec 7, 2017
docs-translations Merge https://github.com/kstar0714/electron Nov 22, 2017
docs Merge pull request #12000 from kalikiana/quoted-snap-version Feb 21, 2018
lib Merge pull request #11968 from electron/refactor-menu-popup Feb 21, 2018
npm revert electron-download dependency to ^3.0.1 Nov 3, 2017
script Fixes from running 2.0.0-beta.1 release Feb 22, 2018
spec Merge pull request #11968 from electron/refactor-menu-popup Feb 21, 2018
tools Remove needless quotes around electron key Feb 22, 2018
vendor Fix the cyclic reference in menu delegate (#11967) Feb 20, 2018
.clang-format Add clang-format config file. Oct 4, 2016
.dockerignore Add testing for arm, arm64 and ia32 linux builds Dec 20, 2017
.gitignore Ignore all npmrc and package-lock Dec 4, 2017
.gitmodules Move brightray submodules to root vendor May 10, 2017
.node-version Bump node version number Sep 14, 2017
.remarkrc add remark lint to ensure fenced codeblocks are formatted properly. Nov 20, 2017
.travis.yml Add arm64 task in travis ci Aug 22, 2017
CODE_OF_CONDUCT.md fix word CODE_OF_CONDUCT.md Nov 22, 2017
CONTRIBUTING.md enhance documentation around contributing to electron (#11887) Feb 12, 2018
Dockerfile Enable testing with python-dbusmock Dec 5, 2017
Dockerfile.arm64 replace gtk2 with gtk3 in dockerfiles Feb 15, 2018
Dockerfile.armv7 replace gtk2 with gtk3 in dockerfiles Feb 15, 2018
Dockerfile.circleci Enable testing with python-dbusmock Dec 5, 2017
Jenkinsfile Add 1 hour timeout Dec 4, 2017
LICENSE Update license year Dec 31, 2017
README.md Fix 'electron-versioning' link in README.md Dec 13, 2017
SECURITY.md 📝 Link to security tutorial Jan 29, 2018
common.gypi Fix "nghttp2" build Nov 24, 2017
electron.gyp Make run-as-node mode optional (#11701) Jan 23, 2018
features.gypi Make run-as-node mode optional (#11701) Jan 23, 2018
filenames.gypi Rename api::Window to api::BrowserWindow Feb 22, 2018
package.json Merge pull request #11937 from electron/groundwater-patch-1 Feb 21, 2018
toolchain.gypi Some compiler flags are clang only Nov 21, 2017

README.md

Electron Logo

CircleCI Build Status AppVeyor Build Status Jenkins Build Status devDependency Status Join the Electron Community on Slack

📝 Available Translations: 🇨🇳 🇹🇼 🇧🇷 🇪🇸 🇰🇷 🇯🇵 🇷🇺 🇫🇷 🇹🇭 🇳🇱 🇹🇷 🇮🇩 🇺🇦 🇨🇿 🇮🇹. View these docs in other languages at electron/electron-i18n.

The Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS. It is based on Node.js and Chromium and is used by the Atom editor and many other apps.

Follow @ElectronJS on Twitter for important announcements.

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to electron@github.com.

Installation

To install prebuilt Electron binaries, use npm. The preferred method is to install Electron as a development dependency in your app:

npm install electron --save-dev --save-exact

The --save-exact flag is recommended as Electron does not follow semantic versioning. For info on how to manage Electron versions in your apps, see Electron versioning.

For more installation options and troubleshooting tips, see installation.

Quick start

Clone and run the electron/electron-quick-start repository to see a minimal Electron app in action:

git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install
npm start

Resources for learning Electron

Programmatic usage

Most people use Electron from the command line, but if you require electron inside your Node app (not your Electron app) it will return the file path to the binary. Use this to spawn Electron from Node scripts:

const electron = require('electron')
const proc = require('child_process')

// will print something similar to /Users/maf/.../Electron
console.log(electron)

// spawn Electron
const child = proc.spawn(electron)

Mirrors

Documentation Translations

Find documentation translations in electron/electron-i18n.

Community

You can ask questions and interact with the community in the following locations:

Check out awesome-electron for a community maintained list of useful example apps, tools and resources.

License

MIT

When using the Electron or other GitHub logos, be sure to follow the GitHub logo guidelines.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - torvalds/linux: Linux kernel source tree
Skip to content
Linux kernel source tree
C Assembly C++ Objective-C Makefile Perl Other
Latest commit af3e79d Feb 20, 2018
torvalds Merge tag 'leds_for-4.16-rc3' of git://git.kernel.org/pub/scm/linux/k…
…ernel/git/j.anaszewski/linux-leds

Pull LED maintainer update:
 "LED update to MAINTAINERS, to admit the reality.

  Message from Richard:
    "I've been looking at some of the emails but not needed to be
     involved for a while now, you're doing fine without me!" [0]

  Many thanks to Richard for his work as a founder of the LED
  subsystem!"

[0] https://lkml.org/lkml/2018/2/18/145

* tag 'leds_for-4.16-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds:
  MAINTAINERS: Remove Richard Purdie from LED maintainers
Permalink
Failed to load latest commit information.
Documentation Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net Feb 19, 2018
LICENSES LICENSES: Add MPL-1.1 license Jan 6, 2018
arch Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/l… Feb 18, 2018
block blk: optimization for classic polling Feb 13, 2018
certs License cleanup: add SPDX GPL-2.0 license identifier to files with no… Nov 2, 2017
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git… Feb 12, 2018
drivers Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net Feb 19, 2018
firmware kbuild: remove all dummy assignments to obj- Nov 18, 2017
fs Merge tag 'for-4.16-rc1-tag' of git://git.kernel.org/pub/scm/linux/ke… Feb 16, 2018
include Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net Feb 19, 2018
init membarrier: Provide core serializing command, *_SYNC_CORE Feb 5, 2018
ipc vfs: do bulk POLL* -> EPOLL* replacement Feb 11, 2018
kernel Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/… Feb 18, 2018
lib dma-direct: comment the dma_direct_free calling convention Feb 12, 2018
mm mm: hide a #warning for COMPILE_TEST Feb 16, 2018
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net Feb 19, 2018
samples sample/bpf: fix erspan metadata Feb 6, 2018
scripts Merge tag 'kbuild-v4.16-2' of git://git.kernel.org/pub/scm/linux/kern… Feb 10, 2018
security vfs: do bulk POLL* -> EPOLL* replacement Feb 11, 2018
sound ALSA: hda/realtek: PCI quirk for Fujitsu U7x7 Feb 14, 2018
tools Merge tag 'perf-core-for-mingo-4.17-20180215' of git://git.kernel.org… Feb 16, 2018
usr initramfs: fix initramfs rebuilds w/ compression after disabling Nov 3, 2017
virt vfs: do bulk POLL* -> EPOLL* replacement Feb 11, 2018
.cocciconfig scripts: add Linux .cocciconfig for coccinelle Jul 22, 2016
.get_maintainer.ignore Add hch to .get_maintainer.ignore Aug 21, 2015
.gitattributes .gitattributes: set git diff driver for C source code files Oct 8, 2016
.gitignore scripts/package: snap-pkg target Dec 12, 2017
.mailmap mailmap: update Mark Yao's email address Jan 5, 2018
COPYING [PATCH] update FSF address in COPYING Sep 10, 2005
CREDITS MAINTAINERS: update TPM driver infrastructure changes Nov 10, 2017
Kbuild Merge tag 'kbuild-v4.15' of git://git.kernel.org/pub/scm/linux/kernel… Nov 18, 2017
Kconfig License cleanup: add SPDX GPL-2.0 license identifier to files with no… Nov 2, 2017
MAINTAINERS MAINTAINERS: Remove Richard Purdie from LED maintainers Feb 19, 2018
Makefile Linux 4.16-rc2 Feb 19, 2018
README README: add a new README file, pointing to the Documentation/ Oct 24, 2016

README

Linux kernel
============

This file was moved to Documentation/admin-guide/README.rst

Please notice that there are several guides for kernel developers and users.
These guides can be rendered in a number of formats, like HTML and PDF.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.
See Documentation/00-INDEX for a list of what is contained in each file.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - FortAwesome/Font-Awesome: The iconic SVG, font, and CSS toolkit
Skip to content
CSS JavaScript
Latest commit 58afb42 Feb 15, 2018

README.md

Font Awesome 5 Free

Version 5 – the iconic SVG, font, and CSS framework

The internet's most popular icon toolkit has been redesigned and built from scratch. On top of this, features like icon font ligatures, an SVG framework, official NPM packages for popular frontend libraries like React, and access to a new CDN.

Not familiar with Font Awesome 5? Learn more about our successful Kickstarter and plan. You can also order Font Awesome Pro which includes tons more icons directly from fontawesome.com.

Get started with 5!

Learn how to get started with Font Awesome or dive deeper into other topics.

Where did Font Awesome 4 (or 3) go?

Now that Font Awesome 5 has been released we are marking version 4 as end-of-life. We don't plan on releasing any further versions of the 4.x or 3.x.

Documentation is still available but it's moved to https://fontawesome.com/v4.7.0 and https://fontawesome.com/v3.2.1.

The Git repository for v4.7.0 and v3.2.1 can be found in our GitHub releases.

Change log

We'll keep track of each release in the CHANGELOG.md

Looking for older versions of Font Awesome? Check the releases.

Upgrading

From time-to-time we'll have special upgrading instructions from one version to the next.

Check out the UPGRADING.md guide when you upgrade your dependencies.

Code of conduct

We will behave ourselves if you behave yourselves. For more details see our CODE_OF_CONDUCT.md.

Contributing

Please read through our contributing guidelines. Included are directions for opening issues.

Versioning

Font Awesome will be maintained under the Semantic Versioning guidelines as much as possible. Releases will be numbered with the following format:

<major>.<minor>.<patch>

For more information on SemVer, please visit http://semver.org.

The major version "5" is part of an umbrella release. It includes many different types of files and technologies. Therefore we deviate from normal SemVer in the following ways:

  • Any release may update the design, look-and-feel, or branding of an existing icon
  • We will never intentionally release a patch version update that breaks backward compatibility
  • A minor release may include backward-incompatible changes but we will write clear upgrading instructions in UPGRADING.md
  • A minor or patch release will never remove icons
  • Bug fixes will be addressed as patch releases unless they include backward incompability then they will be minor releases

License

Font Awesome Free is free, open source, and GPL friendly. You can use it for commercial projects, open source projects, or really almost whatever you want.

  • Icons — CC BY 4.0 License
    • In the Font Awesome Free download, the CC BY 4.0 license applies to all icons packaged as .svg and .js files types.
  • Fonts — SIL OFL 1.1 License
    • In the Font Awesome Free download, the SIL OLF license applies to all icons packaged as web and desktop font files.
  • Code — MIT License
    • In the Font Awesome Free download, the MIT license applies to all non-font and non-icon files.

Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font Awesome Free files already contain embedded comments with sufficient attribution, so you shouldn't need to do anything additional when using these files normally.

We've kept attribution comments terse, so we ask that you do not actively work to remove them from files, especially code. They're a great way for folks to learn about Font Awesome.

Team

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - daneden/animate.css: 🍿 A cross-browser library of CSS animations. As easy to use as an easy thing.
Skip to content
🍿 A cross-browser library of CSS animations. As easy to use as an easy thing.
CSS JavaScript
Latest commit da9afc0 Feb 7, 2018

README.md

Animate.css GitHub release CDNJS Build Status devDependencies Status chat npm version

Just-add-water CSS animation

animate.css is a bunch of cool, fun, and cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and general just-add-water-awesomeness.

Installation

To install via Bower, simply do the following:

$ bower install animate.css --save

or you can install via npm:

$ npm install animate.css --save

Basic Usage

  1. Include the stylesheet on your document's <head>
<head>
  <link rel="stylesheet" href="animate.min.css">
</head>

Instead of installing you may use the remote version (hosted by CDNJS):

<head>
  <link rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/animate.css@3.5.2/animate.min.css">
  <!-- or -->
  <link rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css">
</head>

You may generate a SRI hash of that particular version and then use it to ensure the file's integrity; also you can make anonymous requests to CDN by setting the corresponding crossorigin attribute:

<head>
  <link rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/animate.css@3.5.2/animate.min.css"
  integrity="sha384-OHBBOqpYHNsIqQy8hL1U+8OXf9hH6QRxi0+EODezv82DfnZoV7qoHAZDwMwEJvSw"
  crossorigin="anonymous">
  <!-- or -->
  <link rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css"
  integrity="sha384-OHBBOqpYHNsIqQy8hL1U+8OXf9hH6QRxi0+EODezv82DfnZoV7qoHAZDwMwEJvSw"
  crossorigin="anonymous">
</head>
  1. Add the class animated to the element you want to animate. You may also want to include the class infinite for an infinite loop.

  2. Finally you need to add one of the following classes:

Class Name
bounce flash pulse rubberBand
shake headShake swing tada
wobble jello bounceIn bounceInDown
bounceInLeft bounceInRight bounceInUp bounceOut
bounceOutDown bounceOutLeft bounceOutRight bounceOutUp
fadeIn fadeInDown fadeInDownBig fadeInLeft
fadeInLeftBig fadeInRight fadeInRightBig fadeInUp
fadeInUpBig fadeOut fadeOutDown fadeOutDownBig
fadeOutLeft fadeOutLeftBig fadeOutRight fadeOutRightBig
fadeOutUp fadeOutUpBig flipInX flipInY
flipOutX flipOutY lightSpeedIn lightSpeedOut
rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft
rotateInUpRight rotateOut rotateOutDownLeft rotateOutDownRight
rotateOutUpLeft rotateOutUpRight hinge jackInTheBox
rollIn rollOut zoomIn zoomInDown
zoomInLeft zoomInRight zoomInUp zoomOut
zoomOutDown zoomOutLeft zoomOutRight zoomOutUp
slideInDown slideInLeft slideInRight slideInUp
slideOutDown slideOutLeft slideOutRight slideOutUp

Full example:

<h1 class="animated infinite bounce">Example</h1>

Check out all the animations here!

Usage

To use animate.css in your website, simply drop the stylesheet into your document's <head>, and add the class animated to an element, along with any of the animation names. That's it! You've got a CSS animated element. Super!

<head>
  <link rel="stylesheet" href="animate.min.css">
</head>

or use the version hosted by CDNJS

<head>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css">
</head>

You can do a whole bunch of other stuff with animate.css when you combine it with jQuery or add your own CSS rules. Dynamically add animations using jQuery with ease:

$('#yourElement').addClass('animated bounceOutLeft');

You can also detect when an animation ends:

// See https://github.com/daneden/animate.css/issues/644
var animationEnd = (function(el) {
  var animations = {
    animation: 'animationend',
    OAnimation: 'oAnimationEnd',
    MozAnimation: 'mozAnimationEnd',
    WebkitAnimation: 'webkitAnimationEnd',
  };

  for (var t in animations) {
    if (el.style[t] !== undefined) {
      return animations[t];
    }
  }
})(document.createElement('div'));

$('#yourElement').one(animationEnd, doSomething);

View a video tutorial on how to use Animate.css with jQuery here.

Note: jQuery.one() is used when you want to execute the event handler at most once. More information here.

You can also extend jQuery to add a function that does it all for you:

$.fn.extend({
  animateCss: function(animationName, callback) {
    var animationEnd = (function(el) {
      var animations = {
        animation: 'animationend',
        OAnimation: 'oAnimationEnd',
        MozAnimation: 'mozAnimationEnd',
        WebkitAnimation: 'webkitAnimationEnd',
      };

      for (var t in animations) {
        if (el.style[t] !== undefined) {
          return animations[t];
        }
      }
    })(document.createElement('div'));

    this.addClass('animated ' + animationName).one(animationEnd, function() {
      $(this).removeClass('animated ' + animationName);

      if (typeof callback === 'function') callback();
    });

    return this;
  },
});

And use it like this:

$('#yourElement').animateCss('bounce');
or;
$('#yourElement').animateCss('bounce', function() {
  // Do somthing after animation
});

You can change the duration of your animations, add a delay or change the number of times that it plays:

#yourElement {
  -vendor-animation-duration: 3s;
  -vendor-animation-delay: 2s;
  -vendor-animation-iteration-count: infinite;
}

Note: be sure to replace "vendor" in the CSS with the applicable vendor prefixes (webkit, moz, etc)

Custom Builds

Animate.css is powered by gulp.js, and you can create custom builds pretty easily. First of all, you’ll need Gulp and all other dependencies:

$ cd path/to/animate.css/
$ sudo npm install

Next, run gulp to compile your custom builds. For example, if you want only some of the “attention seekers”, simply edit the animate-config.json file to select only the animations you want to use.

"attention_seekers": {
  "bounce": true,
  "flash": false,
  "pulse": false,
  "shake": true,
  "headShake": true,
  "swing": true,
  "tada": true,
  "wobble": true,
  "jello":true
}

License

Animate.css is licensed under the MIT license. (http://opensource.org/licenses/MIT)

Contributing

Pull requests are the way to go here. I apologise in advance for the slow action on pull requests and issues. I only have two rules for submitting a pull request: match the naming convention (camelCase, categorised [fades, bounces, etc]) and let us see a demo of submitted animations in a pen. That last one is important.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - jquery/jquery: jQuery JavaScript Library
Skip to content
jQuery JavaScript Library
JavaScript HTML Other
Latest commit 4a2bcc2 Feb 12, 2018
Permalink
Failed to load latest commit information.
.github Build: update PR template Mar 18, 2017
build Build: Remove CRLF line endings to fix builds on Windows Jan 9, 2018
dist Build: Fix comment typo Aug 8, 2017
external Tests: Add support for running unit tests via grunt with karma Dec 18, 2017
src Filter: Use direct filter in winnow Jan 17, 2018
test Tests: Fix Android 4.0 Deferred tests Feb 12, 2018
.editorconfig Build: simplify and correct .editorconfig Feb 11, 2016
.eslintignore Build: Add most of the dist folder to .eslintignore Dec 19, 2016
.eslintrc-browser.json Build: ESLint setup improvements Dec 19, 2016
.eslintrc-node.json Build: ESLint setup improvements Dec 19, 2016
.eslintrc.json Build: ESLint setup improvements Dec 19, 2016
.gitattributes Build: change .gitattributes; use system line ends for non-JS files Apr 4, 2014
.gitignore Build: Remove package-lock.json, add it to .gitignore Sep 25, 2017
.mailmap Build: Update my name in .mailmap Aug 12, 2017
.npmignore Build: Drop jscs.json from .npmignore Dec 19, 2016
.npmrc Build: Add .npmrc with save-exact=true Jan 27, 2016
.travis.yml Tests: correctly set sudo in travis config, not karma config Jan 16, 2018
AUTHORS.txt Release: add new authors to AUTHORS.txt Jan 19, 2018
CODE_OF_CONDUCT.md Docs: Create CODE_OF_CONDUCT.md Dec 11, 2017
CONTRIBUTING.md Build: jQuery Foundation -> JS Foundation Dec 5, 2016
Gruntfile.js Build: Add "-debug" suffix to name of karma debug tasks Jan 17, 2018
LICENSE.txt Build: jQuery Foundation -> JS Foundation Dec 5, 2016
README.md Tests: Add support for running unit tests via grunt with karma Dec 18, 2017
package.json Build: Updating the master version to 3.3.2-pre. Jan 20, 2018

README.md

jQuery — New Wave JavaScript

Contribution Guides

In the spirit of open source software development, jQuery always encourages community code contribution. To help you get started and before you jump into writing code, be sure to read these important contribution guidelines thoroughly:

  1. Getting Involved
  2. Core Style Guide
  3. Writing Code for jQuery Foundation Projects

Environments in which to use jQuery

  • Browser support
  • jQuery also supports Node, browser extensions, and other non-browser environments.

What you need to build your own jQuery

In order to build jQuery, you need to have the latest Node.js/npm and git 1.7 or later. Earlier versions might work, but are not supported.

For Windows, you have to download and install git and Node.js.

OS X users should install Homebrew. Once Homebrew is installed, run brew install git to install git, and brew install node to install Node.js.

Linux/BSD users should use their appropriate package managers to install git and Node.js, or build from source if you swing that way. Easy-peasy.

How to build your own jQuery

Clone a copy of the main jQuery git repo by running:

git clone git://github.com/jquery/jquery.git

Enter the jquery directory and run the build script:

cd jquery && npm run build

The built version of jQuery will be put in the dist/ subdirectory, along with the minified copy and associated map file.

If you want to create custom build or help with jQuery development, it would be better to install grunt command line interface as a global package:

npm install -g grunt-cli

Make sure you have grunt installed by testing:

grunt -V

Now by running the grunt command, in the jquery directory, you can build a full version of jQuery, just like with an npm run build command:

grunt

There are many other tasks available for jQuery Core:

grunt -help

Modules

Special builds can be created that exclude subsets of jQuery functionality. This allows for smaller custom builds when the builder is certain that those parts of jQuery are not being used. For example, an app that only used JSONP for $.ajax() and did not need to calculate offsets or positions of elements could exclude the offset and ajax/xhr modules.

Any module may be excluded except for core, and selector. To exclude a module, pass its path relative to the src folder (without the .js extension).

Some example modules that can be excluded are:

  • ajax: All AJAX functionality: $.ajax(), $.get(), $.post(), $.ajaxSetup(), .load(), transports, and ajax event shorthands such as .ajaxStart().
  • ajax/xhr: The XMLHTTPRequest AJAX transport only.
  • ajax/script: The <script> AJAX transport only; used to retrieve scripts.
  • ajax/jsonp: The JSONP AJAX transport only; depends on the ajax/script transport.
  • css: The .css() method. Also removes all modules depending on css (including effects, dimensions, and offset).
  • css/showHide: Non-animated .show(), .hide() and .toggle(); can be excluded if you use classes or explicit .css() calls to set the display property. Also removes the effects module.
  • deprecated: Methods documented as deprecated but not yet removed.
  • dimensions: The .width() and .height() methods, including inner- and outer- variations.
  • effects: The .animate() method and its shorthands such as .slideUp() or .hide("slow").
  • event: The .on() and .off() methods and all event functionality. Also removes event/alias.
  • event/alias: All event attaching/triggering shorthands like .click() or .mouseover().
  • event/focusin: Cross-browser support for the focusin and focusout events.
  • event/trigger: The .trigger() and .triggerHandler() methods. Used by alias and focusin modules.
  • offset: The .offset(), .position(), .offsetParent(), .scrollLeft(), and .scrollTop() methods.
  • wrap: The .wrap(), .wrapAll(), .wrapInner(), and .unwrap() methods.
  • core/ready: Exclude the ready module if you place your scripts at the end of the body. Any ready callbacks bound with jQuery() will simply be called immediately. However, jQuery(document).ready() will not be a function and .on("ready", ...) or similar will not be triggered.
  • deferred: Exclude jQuery.Deferred. This also removes jQuery.Callbacks. Note that modules that depend on jQuery.Deferred(AJAX, effects, core/ready) will not be removed and will still expect jQuery.Deferred to be there. Include your own jQuery.Deferred implementation or exclude those modules as well (grunt custom:-deferred,-ajax,-effects,-core/ready).
  • exports/global: Exclude the attachment of global jQuery variables ($ and jQuery) to the window.
  • exports/amd: Exclude the AMD definition.

As a special case, you may also replace Sizzle by using a special flag grunt custom:-sizzle.

  • sizzle: The Sizzle selector engine. When this module is excluded, it is replaced by a rudimentary selector engine based on the browser's querySelectorAll method that does not support jQuery selector extensions or enhanced semantics. See the selector-native.js file for details.

Note: Excluding Sizzle will also exclude all jQuery selector extensions (such as effects/animatedSelector and css/hiddenVisibleSelectors).

The build process shows a message for each dependent module it excludes or includes.

AMD name

As an option, you can set the module name for jQuery's AMD definition. By default, it is set to "jquery", which plays nicely with plugins and third-party libraries, but there may be cases where you'd like to change this. Simply set the "amd" option:

grunt custom --amd="custom-name"

Or, to define anonymously, set the name to an empty string.

grunt custom --amd=""

Custom Build Examples

To create a custom build, first check out the version:

git pull; git checkout VERSION

Where VERSION is the version you want to customize. Then, make sure all Node dependencies are installed:

npm install

Create the custom build using the grunt custom option, listing the modules to be excluded.

Exclude all ajax functionality:

grunt custom:-ajax

Excluding css removes modules depending on CSS: effects, offset, dimensions.

grunt custom:-css

Exclude a bunch of modules:

grunt custom:-ajax,-css,-deprecated,-dimensions,-effects,-event/alias,-offset,-wrap

For questions or requests regarding custom builds, please start a thread on the Developing jQuery Core section of the forum. Due to the combinatorics and custom nature of these builds, they are not regularly tested in jQuery's unit test process. The non-Sizzle selector engine currently does not pass unit tests because it is missing too much essential functionality.

Running the Unit Tests

Make sure you have the necessary dependencies:

npm install

Start grunt watch or npm start to auto-build jQuery as you work:

grunt watch

Run the unit tests with a local server that supports PHP. Ensure that you run the site from the root directory, not the "test" directory. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options:

Building to a different directory

To copy the built jQuery files from /dist to another directory:

grunt && grunt dist:/path/to/special/location/

With this example, the output files would be:

/path/to/special/location/jquery.js
/path/to/special/location/jquery.min.js

To add a permanent copy destination, create a file in dist/ called ".destination.json". Inside the file, paste and customize the following:

{
  "/Absolute/path/to/other/destination": true
}

Additionally, both methods can be combined.

Essential Git

As the source code is handled by the Git version control system, it's useful to know some features used.

Cleaning

If you want to purge your working directory back to the status of upstream, the following commands can be used (remember everything you've worked on is gone after these):

git reset --hard upstream/master
git clean -fdx

Rebasing

For feature/topic branches, you should always use the --rebase flag to git pull, or if you are usually handling many temporary "to be in a github pull request" branches, run the following to automate this:

git config branch.autosetuprebase local

(see man git-config for more information)

Handling merge conflicts

If you're getting merge conflicts when merging, instead of editing the conflicted files manually, you can use the feature git mergetool. Even though the default tool xxdiff looks awful/old, it's rather useful.

The following are some commands that can be used there:

  • Ctrl + Alt + M - automerge as much as possible
  • b - jump to next merge conflict
  • s - change the order of the conflicted lines
  • u - undo a merge
  • left mouse button - mark a block to be the winner
  • middle mouse button - mark a line to be the winner
  • Ctrl + S - save
  • Ctrl + Q - quit

QUnit Reference

Test methods

expect( numAssertions );
stop();
start();

Note: QUnit's eventual addition of an argument to stop/start is ignored in this test suite so that start and stop can be passed as callbacks without worrying about their parameters.

Test assertions

ok( value, [message] );
equal( actual, expected, [message] );
notEqual( actual, expected, [message] );
deepEqual( actual, expected, [message] );
notDeepEqual( actual, expected, [message] );
strictEqual( actual, expected, [message] );
notStrictEqual( actual, expected, [message] );
throws( block, [expected], [message] );

Test Suite Convenience Methods Reference (See test/data/testinit.js)

Returns an array of elements with the given IDs

q( ... );

Example:

q("main", "foo", "bar");

=> [ div#main, span#foo, input#bar ]

Asserts that a selection matches the given IDs

t( testName, selector, [ "array", "of", "ids" ] );

Example:

t("Check for something", "//[a]", ["foo", "bar"]);

Fires a native DOM event without going through jQuery

fireNative( node, eventType )

Example:

fireNative( jQuery("#elem")[0], "click" );

Add random number to url to stop caching

url( "some/url" );

Example:

url("index.html");

=> "data/index.html?10538358428943"


url("mock.php?foo=bar");

=> "data/mock.php?foo=bar&10538358345554"

Run tests in an iframe

Some tests may require a document other than the standard test fixture, and these can be run in a separate iframe. The actual test code and assertions remain in jQuery's main test files; only the minimal test fixture markup and setup code should be placed in the iframe file.

testIframe( testName, fileName,
  function testCallback(
      assert, jQuery, window, document,
	  [ additional args ] ) {
	...
  } );

This loads a page, constructing a url with fileName "./data/" + fileName. The iframed page determines when the callback occurs in the test by including the "/test/data/iframeTest.js" script and calling startIframeTest( [ additional args ] ) when appropriate. Often this will be after either document ready or window.onload fires.

The testCallback receives the QUnit assert object created by testIframe for this test, followed by the global jQuery, window, and document from the iframe. If the iframe code passes any arguments to startIframeTest, they follow the document argument.

Questions?

If you have any questions, please feel free to ask on the Developing jQuery Core forum or in #jquery on irc.freenode.net.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - moby/moby: Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Skip to content
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Go Shell PowerShell Makefile C Vim script
Latest commit 867a10a Feb 22, 2018
thaJeztah Merge pull request #36373 from dnephin/prepare-for-image-service
Move daemon image code in preparation for ImageService
Permalink
Failed to load latest commit information.
.github Rename a few docker to moby Oct 25, 2017
api Adjust minimum API version for templated configs/secrets Feb 21, 2018
builder Merge pull request #36224 from dnephin/refactor-commit Feb 8, 2018
cli Add canonical import comment Feb 5, 2018
client Remove duplicate calls for getting an APIClient Feb 20, 2018
cmd/dockerd Move log validator logic after plugins are loaded Feb 15, 2018
container Merge configs/secrets in unix implementation Feb 16, 2018
contrib Bump Golang to 1.9.4 Feb 7, 2018
daemon Image commit Feb 21, 2018
distribution Add canonical import comment Feb 5, 2018
dockerversion Add canonical import comment Feb 5, 2018
docs Adjust minimum API version for templated configs/secrets Feb 21, 2018
errdefs Add canonical import comment Feb 5, 2018
hack Merge pull request #36336 from cpuguy83/split_installers Feb 22, 2018
image Don't restore image if layer does not exist Feb 13, 2018
integration-cli Merge pull request #36363 from dnephin/fix-attach-detach-test Feb 22, 2018
integration Merge pull request #33702 from aaronlehmann/templated-secrets-and-con… Feb 21, 2018
internal Unify the frozen images to the multi-arch version Feb 14, 2018
layer Add canonical import comment Feb 5, 2018
libcontainerd Merge pull request #36268 from Microsoft/jjh/rs3-bump Feb 12, 2018
migrate/v1 Add canonical import comment Feb 5, 2018
oci Add /proc/keys to masked paths Feb 21, 2018
opts Add canonical import comment Feb 5, 2018
pkg Merge pull request #35829 from cpuguy83/no_private_mount_for_plugins Feb 21, 2018
plugin Merge pull request #35829 from cpuguy83/no_private_mount_for_plugins Feb 21, 2018
profiles Add canonical import comment Feb 5, 2018
project Add Moby TSC references/governance details Dec 13, 2017
reference Add canonical import comment Feb 5, 2018
registry Add canonical import comment Feb 5, 2018
reports Add builder dev report for 2017-07-17 Jul 19, 2017
restartmanager Add canonical import comment Feb 5, 2018
runconfig Add canonical import comment Feb 5, 2018
vendor Bump swarmkit Feb 21, 2018
volume Merge pull request #35829 from cpuguy83/no_private_mount_for_plugins Feb 21, 2018
.DEREK.yml project: try alexellis/derek bot to manage PRs and issues Dec 4, 2017
.dockerignore [EXPERIMENTAL] Integration Test on Swarm Feb 28, 2017
.gitignore Add code coverage report and codecov config Jan 16, 2018
.mailmap Update authors Feb 21, 2018
AUTHORS Update authors Feb 21, 2018
CHANGELOG.md Dropped hyphen in bind mount where appropriate Aug 19, 2017
CONTRIBUTING.md Fix a typo in CONTRIBUTING.md Jan 28, 2018
Dockerfile Split binary installers/commit scripts Feb 21, 2018
Dockerfile.aarch64 Split binary installers/commit scripts Feb 21, 2018
Dockerfile.armhf Split binary installers/commit scripts Feb 21, 2018
Dockerfile.e2e Split binary installers/commit scripts Feb 21, 2018
Dockerfile.ppc64le Split binary installers/commit scripts Feb 21, 2018
Dockerfile.s390x Split binary installers/commit scripts Feb 21, 2018
Dockerfile.simple Split binary installers/commit scripts Feb 21, 2018
Dockerfile.windows Bump Golang to 1.9.4 Feb 7, 2018
LICENSE Update copyright dates Feb 24, 2017
MAINTAINERS Clean some maintainers 👼 Feb 13, 2018
Makefile Merge pull request #34369 from cyphar/build-buildmode-pie Jan 29, 2018
NOTICE Update LICENSE date Feb 15, 2017
README.md Add "Lego set" back in README.md Oct 10, 2017
ROADMAP.md Update the Roadmap Oct 11, 2017
TESTING.md Add testing.md Aug 4, 2017
VENDORING.md fix the bare url and the Summary of http://semver.org Jan 17, 2017
codecov.yml Add code coverage report and codecov config Jan 16, 2018
poule.yml Clean some maintainers 👼 Feb 13, 2018
vendor.conf Merge pull request #36371 from cpuguy83/bump_swarmkit Feb 22, 2018

README.md

The Moby Project

Moby Project logo

Moby is an open-source project created by Docker to enable and accelerate software containerization.

It provides a "Lego set" of toolkit components, the framework for assembling them into custom container-based systems, and a place for all container enthusiasts and professionals to experiment and exchange ideas. Components include container build tools, a container registry, orchestration tools, a runtime and more, and these can be used as building blocks in conjunction with other tools and projects.

Principles

Moby is an open project guided by strong principles, aiming to be modular, flexible and without too strong an opinion on user experience. It is open to the community to help set its direction.

  • Modular: the project includes lots of components that have well-defined functions and APIs that work together.
  • Batteries included but swappable: Moby includes enough components to build fully featured container system, but its modular architecture ensures that most of the components can be swapped by different implementations.
  • Usable security: Moby provides secure defaults without compromising usability.
  • Developer focused: The APIs are intended to be functional and useful to build powerful tools. They are not necessarily intended as end user tools but as components aimed at developers. Documentation and UX is aimed at developers not end users.

Audience

The Moby Project is intended for engineers, integrators and enthusiasts looking to modify, hack, fix, experiment, invent and build systems based on containers. It is not for people looking for a commercially supported system, but for people who want to work and learn with open source code.

Relationship with Docker

The components and tools in the Moby Project are initially the open source components that Docker and the community have built for the Docker Project. New projects can be added if they fit with the community goals. Docker is committed to using Moby as the upstream for the Docker Product. However, other projects are also encouraged to use Moby as an upstream, and to reuse the components in diverse ways, and all these uses will be treated in the same way. External maintainers and contributors are welcomed.

The Moby project is not intended as a location for support or feature requests for Docker products, but as a place for contributors to work on open source code, fix bugs, and make the code more useful. The releases are supported by the maintainers, community and users, on a best efforts basis only, and are not intended for customers who want enterprise or commercial support; Docker EE is the appropriate product for these use cases.


Legal

Brought to you courtesy of our legal counsel. For more context, please see the NOTICE document in this repo.

Use and transfer of Moby may be subject to certain restrictions by the United States and other governments.

It is your responsibility to ensure that your use and/or transfer does not violate applicable laws.

For more information, please see https://www.bis.doc.gov

Licensing

Moby is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - nodejs/node: Node.js JavaScript runtime
Skip to content
JavaScript C++ Python C HTML PHP Other
Switch branches/tags
Latest commit fecc64d Feb 22, 2018
BridgeAR and addaleax test: fix test-http-connect
Fixes: #18940
PR-URL: #18941
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Permalink
Failed to load latest commit information.
.github doc: split CONTRIBUTING.md Jan 23, 2018
benchmark tools: enable eslint one-var rule Feb 22, 2018
deps deps: cherry-pick 46c4979e86 from upstream v8 Feb 22, 2018
doc 2018-02-22, Version 9.6.0 (Current) Feb 22, 2018
lib http: remove default 'drain' listener on upgrade Feb 22, 2018
src src: fix abort when taking a heap snapshot Feb 22, 2018
test test: fix test-http-connect Feb 22, 2018
tools build, win: vcbuild improvements Feb 22, 2018
.editorconfig tools: move eslint from tools to tools/node_modules Jan 11, 2018
.eslintignore lint: move eslint to new plugin system Feb 20, 2018
.eslintrc.js tools: update eslint rule Feb 22, 2018
.gitattributes src: limit .gitattributes eol to vcbuild.bat Jan 13, 2015
.gitignore lint: move eslint to new plugin system Feb 20, 2018
.mailmap doc: update AUTHORS list Dec 26, 2017
.nycrc test: exclude write-coverage from coverage report Sep 8, 2017
.remarkrc tools: use remark-preset-lint-node in .remarkrc Oct 25, 2017
AUTHORS doc: update AUTHORS list Dec 26, 2017
BSDmakefile node: rename from io.js to node Aug 23, 2015
BUILDING.md doc: add builtin module in building.md Jan 18, 2018
CHANGELOG.md 2018-02-22, Version 9.6.0 (Current) Feb 22, 2018
CODE_OF_CONDUCT.md doc: move Code of Conduct to admin repo Nov 28, 2017
COLLABORATOR_GUIDE.md doc: reorder section on updating PR branch Jan 30, 2018
CONTRIBUTING.md doc: split CONTRIBUTING.md Jan 23, 2018
CPP_STYLE_GUIDE.md doc: suggest not to throw JS errors from C++ Jan 16, 2018
GOVERNANCE.md doc: fix minor typos in GOVERNANCE.md Feb 17, 2018
LICENSE tools: add babel-eslint Jan 11, 2018
Makefile lint: move eslint to new plugin system Feb 20, 2018
README.md doc: remove CII badge in README Feb 22, 2018
android-configure build: don't create directory for NDK toolchain Mar 22, 2017
common.gypi deps: cherry-pick 46c4979e86 from upstream v8 Feb 22, 2018
configure build: allow x86_64 as a dest_cpu alias for x64 Feb 4, 2018
node.gyp src: prevent persistent handle resource leaks Feb 21, 2018
node.gypi build: include the libuv and zlib into node Feb 4, 2018
vcbuild.bat build, win: vcbuild improvements Feb 22, 2018

README.md

Node.js

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. For more information on using Node.js, see the Node.js Website.

The Node.js project is supported by the Node.js Foundation. Contributions, policies, and releases are managed under an open governance model.

This project is bound by a Code of Conduct.

Table of Contents

Support

Node.js contributors have limited availability to address general support questions. Please make sure you are using a currently-supported version of Node.js.

When looking for support, please first search for your question in these venues:

If you didn't find an answer in one of the venues above, you can:

GitHub issues are meant for tracking enhancements and bugs, not general support.

Remember, libre != gratis; the open source license grants you the freedom to use and modify, but not commitments of other people's time. Please be respectful, and set your expectations accordingly.

Release Types

The Node.js project maintains multiple types of releases:

  • Current: Released from active development branches of this repository, versioned by SemVer and signed by a member of the Release Team. Code for Current releases is organized in this repository by major version number. For example: v4.x. The major version number of Current releases will increment every 6 months allowing for breaking changes to be introduced. This happens in April and October every year. Current release lines beginning in October each year have a maximum support life of 8 months. Current release lines beginning in April each year will convert to LTS (see below) after 6 months and receive further support for 30 months.
  • LTS: Releases that receive Long-term Support, with a focus on stability and security. Every second Current release line (major version) will become an LTS line and receive 18 months of Active LTS support and a further 12 months of Maintenance. LTS release lines are given alphabetically ordered codenames, beginning with v4 Argon. LTS releases are less frequent and will attempt to maintain consistent major and minor version numbers, only incrementing patch version numbers. There are no breaking changes or feature additions, except in some special circumstances.
  • Nightly: Versions of code in this repository on the current Current branch, automatically built every 24-hours where changes exist. Use with caution.

More information can be found in the LTS README.

Download

Binaries, installers, and source tarballs are available at https://nodejs.org.

Current and LTS Releases

Current and LTS releases are available at https://nodejs.org/download/release/, listed under their version strings. The latest directory is an alias for the latest Current release. The latest LTS release from an LTS line is available in the form: latest-codename. For example: https://nodejs.org/download/release/latest-argon.

Nightly Releases

Nightly builds are available at https://nodejs.org/download/nightly/, listed under their version string which includes their date (in UTC time) and the commit SHA at the HEAD of the release.

API Documentation

API documentation is available in each release and nightly directory under docs. https://nodejs.org/api/ points to the API documentation of the latest stable version.

Verifying Binaries

Current, LTS, and Nightly download directories all contain a SHASUMS256.txt file that lists the SHA checksums for each file available for download.

The SHASUMS256.txt can be downloaded using curl.

$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt

To check that a downloaded file matches the checksum, run it through sha256sum with a command such as:

$ grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c -

Current and LTS releases (but not Nightlies) also have the GPG detached signature of SHASUMS256.txt available as SHASUMS256.txt.sig. You can use gpg to verify that SHASUMS256.txt has not been tampered with.

To verify SHASUMS256.txt has not been altered, you will first need to import all of the GPG keys of individuals authorized to create releases. They are listed at the bottom of this README under Release Team. Use a command such as this to import the keys:

$ gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D

See the bottom of this README for a full script to import active release keys.

Next, download the SHASUMS256.txt.sig for the release:

$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt.sig

After downloading the appropriate SHASUMS256.txt and SHASUMS256.txt.sig files, you can then use gpg --verify SHASUMS256.txt.sig SHASUMS256.txt to verify that the file has been signed by an authorized member of the Node.js team.

Once verified, use the SHASUMS256.txt file to get the checksum for the binary verification command above.

Building Node.js

See BUILDING.md for instructions on how to build Node.js from source. The document also contains a list of officially supported platforms.

Security

Security flaws in Node.js should be reported by emailing security@nodejs.org. Please do not disclose security bugs publicly until they have been handled by the security team.

Your email will be acknowledged within 24 hours, and you will receive a more detailed response to your email within 48 hours indicating the next steps in handling your report.

There are no hard and fast rules to determine if a bug is worth reporting as a security issue. The general rule is an issue worth reporting should allow an attacker to compromise the confidentiality, integrity, or availability of the Node.js application or its system for which the attacker does not already have the capability.

To illustrate the point, here are some examples of past issues and what the Security Response Team thinks of them. When in doubt, however, please do send us a report nonetheless.

Public disclosure preferred

  • #14519: Internal domain function can be used to cause segfaults. Causing program termination using either the public JavaScript APIs or the private bindings layer APIs requires the ability to execute arbitrary JavaScript code, which is already the highest level of privilege possible.

  • #12141: buffer: zero fill Buffer(num) by default. The buffer constructor behavior was documented, but found to be prone to mis-use. It has since been changed, but despite much debate, was not considered misuse prone enough to justify fixing in older release lines and breaking our API stability contract.

Private disclosure preferred

  • CVE-2016-7099: Fix invalid wildcard certificate validation check. This is a high severity defect that would allow a malicious TLS server to serve an invalid wildcard certificate for its hostname and be improperly validated by a Node.js client.

  • #5507: Fix a defect that makes the CacheBleed Attack possible. Many, though not all, OpenSSL vulnerabilities in the TLS/SSL protocols also effect Node.js.

  • CVE-2016-2216: Fix defects in HTTP header parsing for requests and responses that can allow response splitting. While the impact of this vulnerability is application and network dependent, it is remotely exploitable in the HTTP protocol.

When in doubt, please do send us a report.

Current Project Team Members

The Node.js project team comprises a group of core collaborators and a sub-group that forms the Technical Steering Committee (TSC) which governs the project. For more information about the governance of the Node.js project, see GOVERNANCE.md.

TSC (Technical Steering Committee)

TSC Emeriti

Collaborators

Collaborator Emeriti

Collaborators follow the COLLABORATOR_GUIDE.md in maintaining the Node.js project.

Release Team

Node.js releases are signed with one of the following GPG keys:

The full set of trusted release keys can be imported by running:

gpg --keyserver pool.sks-keyservers.net --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5
gpg --keyserver pool.sks-keyservers.net --recv-keys FD3A5288F042B6850C66B31F09FE44734EB7990E
gpg --keyserver pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1
gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D
gpg --keyserver pool.sks-keyservers.net --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8
gpg --keyserver pool.sks-keyservers.net --recv-keys B9AE9905FFD7803F25714661B63B535A4C206CA9
gpg --keyserver pool.sks-keyservers.net --recv-keys 56730D5401028683275BD23C23EFEFE93C4CFFFE
gpg --keyserver pool.sks-keyservers.net --recv-keys 77984A986EBC2AA786BC0F66B01FBB92821C587A

See the section above on Verifying Binaries for details on what to do with these keys to verify that a downloaded file is official.

Previous releases may also have been signed with one of the following GPG keys:

Contributing to Node.js

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - vinta/awesome-python: A curated list of awesome Python frameworks, libraries, software and resources
Skip to content
A curated list of awesome Python frameworks, libraries, software and resources
Python Makefile
Switch branches/tags
Nothing to show
Latest commit d748441 Feb 18, 2018

README.md

Awesome Python Awesome

A curated list of awesome Python frameworks, libraries, software and resources.

Inspired by awesome-php.


Admin Panels

Libraries for administrative interfaces.

  • Ajenti - The admin panel your servers deserve.
  • django-suit - Alternative Django Admin-Interface (free only for Non-commercial use).
  • django-xadmin - Drop-in replacement of Django admin comes with lots of goodies.
  • flask-admin - Simple and extensible administrative interface framework for Flask.
  • flower - Real-time monitor and web admin for Celery.
  • Grappelli - A jazzy skin for the Django Admin-Interface.
  • Wooey - A Django app which creates automatic web UIs for Python scripts.

Algorithms and Design Patterns

Python implementation of algorithms and design patterns.

  • algorithms - A module of algorithms for Python.
  • PyPattyrn - A simple yet effective library for implementing common design patterns.
  • python-patterns - A collection of design patterns in Python.
  • sortedcontainers - Fast, pure-Python implementation of SortedList, SortedDict, and SortedSet types.

Anti-spam

Libraries for fighting spam.

Asset Management

Tools for managing, compressing and minifying website assets.

  • django-compressor - Compresses linked and inline JavaScript or CSS into a single cached file.
  • django-pipeline - An asset packaging library for Django.
  • django-storages - A collection of custom storage back ends for Django.
  • fanstatic - Packages, optimizes, and serves static file dependencies as Python packages.
  • fileconveyor - A daemon to detect and sync files to CDNs, S3 and FTP.
  • flask-assets - Helps you integrate webassets into your Flask app.
  • jinja-assets-compressor - A Jinja extension to compile and compress your assets.
  • webassets - Bundles, optimizes, and manages unique cache-busting URLs for static resources.

Audio

Libraries for manipulating audio.

  • audiolazy - Expressive Digital Signal Processing (DSP) package for Python.
  • audioread - Cross-library (GStreamer + Core Audio + MAD + FFmpeg) audio decoding.
  • beets - A music library manager and MusicBrainz tagger.
  • dejavu - Audio fingerprinting and recognition.
  • django-elastic-transcoder - Django + Amazon Elastic Transcoder.
  • eyeD3 - A tool for working with audio files, specifically MP3 files containing ID3 metadata.
  • id3reader - A Python module for reading MP3 meta data.
  • m3u8 - A module for parsing m3u8 file.
  • mingus - An advanced music theory and notation package with MIDI file and playback support.
  • mutagen - A Python module to handle audio metadata.
  • pyAudioAnalysis - Python Audio Analysis Library: Feature Extraction, Classification, Segmentation and Applications
  • pydub - Manipulate audio with a simple and easy high level interface.
  • pyechonest - Python client for the Echo Nest API.
  • talkbox - A Python library for speech/signal processing.
  • TimeSide - Open web audio processing framework.
  • tinytag - A library for reading music meta data of MP3, OGG, FLAC and Wave files.

Authentication

Libraries for implementing authentications schemes.

  • OAuth
    • Authomatic - Simple but powerful framework agnostic authentication/authorization client.
    • django-allauth - Authentication app for Django that "just works."
    • django-oauth-toolkit - OAuth 2 goodies for Django.
    • Flask-OAuthlib - OAuth 1.0/a, 2.0 implementation of client and provider for Flask.
    • OAuthLib - A generic and thorough implementation of the OAuth request-signing logic.
    • python-oauth2 - A fully tested, abstract interface to creating OAuth clients and servers.
    • python-social-auth - An easy-to-setup social authentication mechanism.
    • rauth - A Python library for OAuth 1.0/a, 2.0, and Ofly.
    • sanction - A dead simple OAuth2 client implementation.
  • Others
    • jose - JavaScript Object Signing and Encryption draft implementation.
    • PyJWT - Implementation of the JSON Web Token draft 01.
    • python-jws - Implementation of JSON Web Signatures draft 02.
    • python-jwt - Module for generating and verifying JSON Web Tokens.

Build Tools

Compile software from source code.

  • BitBake - A make-like build tool for embedded Linux.
  • buildout - A build system for creating, assembling and deploying applications from multiple parts.
  • PlatformIO - A console tool to build code with different development platforms.
  • PyBuilder - A continuous build tool written in pure Python.
  • SCons - A software construction tool.

CMS

Content Management Systems.

  • django-cms - An Open source enterprise CMS based on the Django.
  • djedi-cms - A lightweight but yet powerful Django CMS with plugins, inline editing and performance in mind.
  • FeinCMS - One of the most advanced Content Management Systems built on Django.
  • Kotti - A high-level, Pythonic web application framework built on Pyramid.
  • Mezzanine - A powerful, consistent, and flexible content management platform.
  • Opps - A Django-based CMS for magazines, newspapers websites and portals with high-traffic.
  • Plone - A CMS built on top of the open source application server Zope.
  • Quokka - Flexible, extensible, small CMS powered by Flask and MongoDB.
  • Wagtail - A Django content management system.
  • Widgy - Last CMS framework, based on Django.

Caching

Libraries for caching data.

  • Beaker - A library for caching and sessions for use with web applications and stand-alone Python scripts and applications.
  • DiskCache - SQLite and file backed cache backend with faster lookups than memcached and redis.
  • django-cache-machine - Automatic caching and invalidation for Django models.
  • django-cacheops - A slick ORM cache with automatic granular event-driven invalidation.
  • django-viewlet - Render template parts with extended cache control.
  • dogpile.cache - dogpile.cache is next generation replacement for Beaker made by same authors.
  • HermesCache - Python caching library with tag-based invalidation and dogpile effect prevention.
  • johnny-cache - A caching framework for django applications.
  • pylibmc - A Python wrapper around the libmemcached interface.

ChatOps Tools

Libraries for chatbot development.

  • Errbot - The easiest and most popular chatbot to implement ChatOps.

Code Analysis

Tools of static analysis, linters and code quality checkers. See: awesome-static-analysis.

  • Code Analysis
    • flake8 - A wrapper around pycodestyle, pyflakes and McCabe.
    • coala - Language independent and easily extendable code analysis application.
    • code2flow - Turn your Python and JavaScript code into DOT flowcharts.
    • prospector - A tool to analyse Python code.
    • pycallgraph - A library that visualises the flow (call graph) of your Python application.
    • pylama - A code audit tool for Python and JavaScript.
    • pylint - A fully customizable source code analyzer.
  • Static Type Checkers
    • mypy - Check variable types during compile time.
  • Static Type Annotations Generators
    • MonkeyType - A system for Python that generates static type annotations by collecting runtime types

Command-line Tools

Libraries for building command-line application.

  • Command-line Application Development
    • asciimatics - Cross-platform, full-screen terminal package (i.e. mouse/keyboard input and coloured, positioned text output) complete with high-level API for complex animations and special effects.
    • cement - CLI Application Framework for Python.
    • click - A package for creating beautiful command line interfaces in a composable way.
    • cliff - A framework for creating command-line programs with multi-level commands.
    • clint - Python Command-line Application Tools.
    • colorama - Cross-platform colored terminal text.
    • docopt - Pythonic command line arguments parser.
    • Gooey - Turn command line programs into a full GUI application with one line
    • Python-Fire - A library for creating command line interfaces from absolutely any Python object.
    • python-prompt-toolkit - A Library for building powerful interactive command lines.
  • Productivity Tools
    • aws-cli - A universal command-line interface for Amazon Web Services.
    • bashplotlib - Making basic plots in the terminal.
    • caniusepython3 - Determine what projects are blocking you from porting to Python 3.
    • cookiecutter - A command-line utility that creates projects from cookiecutters (project templates).
    • doitlive - A tool for live presentations in the terminal.
    • howdoi - Instant coding answers via the command line.
    • httpie - A command line HTTP client, a user-friendly cURL replacement.
    • mycli - A Terminal Client for MySQL with AutoCompletion and Syntax Highlighting.
    • PathPicker - Select files out of bash output.
    • percol - Adds flavor of interactive selection to the traditional pipe concept on UNIX.
    • pgcli - Postgres CLI with autocompletion and syntax highlighting.
    • SAWS - A Supercharged AWS CLI.
    • thefuck - Correcting your previous console command.
    • try - A dead simple CLI to try out python packages - It's never been easier.

Compatibility

Libraries for migrating from Python 2 to 3.

  • Python-Future - The missing compatibility layer between Python 2 and Python 3.
  • Python-Modernize - Modernizes Python code for eventual Python 3 migration.
  • Six - Python 2 and 3 compatibility utilities.

Computer Vision

Libraries for computer vision.

Concurrency and Parallelism

Libraries for concurrent and parallel execution.

  • eventlet - Asynchronous framework with WSGI support.
  • gevent - A coroutine-based Python networking library that uses greenlet.
  • multiprocessing - (Python standard library) Process-based "threading" interface.
  • threading - (Python standard library) Higher-level threading interface.
  • Tomorrow - Magic decorator syntax for asynchronous code.
  • uvloop - Ultra fast implementation of asyncio event loop on top of libuv.

Configuration

Libraries for storing and parsing configuration options.

  • config - Hierarchical config from the author of logging.
  • ConfigObj - INI file parser with validation.
  • ConfigParser - (Python standard library) INI file parser.
  • profig - Config from multiple formats with value conversion.
  • python-decouple - Strict separation of settings from code.

Cryptography

  • cryptography - A package designed to expose cryptographic primitives and recipes to Python developers.
  • hashids - Implementation of hashids in Python.
  • Paramiko - A Python (2.6+, 3.3+) implementation of the SSHv2 protocol, providing both client and server functionality.
  • Passlib - Secure password storage/hashing library, very high level.
  • PyNacl - Python binding to the Networking and Cryptography (NaCl) library.

Data Analysis

Libraries for data analyzing.

  • Blaze - NumPy and Pandas interface to Big Data.
  • Open Mining - Business Intelligence (BI) in Pandas interface.
  • Orange - Data mining, data visualization, analysis and machine learning through visual programming or scripts.
  • Pandas - A library providing high-performance, easy-to-use data structures and data analysis tools.

Data Validation

Libraries for validating data. Used for forms in many cases.

  • Cerberus - A lightweight and extensible data validation library.
  • colander - Validating and deserializing data obtained via XML, JSON, an HTML form post.
  • jsonschema - An implementation of JSON Schema for Python.
  • schema - A library for validating Python data structures.
  • Schematics - Data Structure Validation.
  • valideer - Lightweight extensible data validation and adaptation library.
  • voluptuous - A Python data validation library.

Data Visualization

Libraries for visualizing data. See: awesome-javascript.

  • Altair - Declarative statistical visualization library for Python.
  • Bokeh - Interactive Web Plotting for Python.
  • bqplot - Interactive Plotting Library for the Jupyter Notebook
  • ggplot - Same API as ggplot2 for R.
  • Matplotlib - A Python 2D plotting library.
  • Pygal - A Python SVG Charts Creator.
  • PyGraphviz - Python interface to Graphviz.
  • PyQtGraph - Interactive and realtime 2D/3D/Image plotting and science/engineering widgets.
  • Seaborn - Statistical data visualization using Matplotlib.
  • VisPy - High-performance scientific visualization based on OpenGL.

Database

Databases implemented in Python.

  • pickleDB - A simple and lightweight key-value store for Python.
  • PipelineDB - The Streaming SQL Database.
  • TinyDB - A tiny, document-oriented database.
  • ZODB - A native object database for Python. A key-value and object graph database.

Database Drivers

Libraries for connecting and operating databases.

  • MySQL - awesome-mysql
    • mysql-python - The MySQL database connector for Python.
    • mysqlclient - mysql-python fork supporting Python 3.
    • oursql - A better MySQL connector with support for native prepared statements and BLOBs.
    • PyMySQL - Pure Python MySQL driver compatible to mysql-python.
  • PostgreSQL
    • psycopg2 - The most popular PostgreSQL adapter for Python.
    • queries - A wrapper of the psycopg2 library for interacting with PostgreSQL.
    • txpostgres - Twisted based asynchronous driver for PostgreSQL.
  • Other Relational Databases
    • apsw - Another Python SQLite wrapper.
    • dataset - Store Python dicts in a database - works with SQLite, MySQL, and PostgreSQL.
    • pymssql - A simple database interface to Microsoft SQL Server.
  • NoSQL Databases
    • cassandra-python-driver - Python driver for Cassandra.
    • HappyBase - A developer-friendly library for Apache HBase.
    • Plyvel - A fast and feature-rich Python interface to LevelDB.
    • py2neo - Python wrapper client for Neo4j's restful interface.
    • pycassa - Python Thrift driver for Cassandra.
    • PyMongo - The official Python client for MongoDB.
    • redis-py - The Redis Python Client.
    • telephus - Twisted based client for Cassandra.
    • txRedis - Twisted based client for Redis.

Date and Time

Libraries for working with dates and times.

  • Chronyk - A Python 3 library for parsing human-written times and dates.
  • dateutil - Extensions to the standard Python datetime module.
  • delorean - A library for clearing up the inconvenient truths that arise dealing with datetimes.
  • moment - A Python library for dealing with dates/times. Inspired by Moment.js.
  • Pendulum - Python datetimes made easy.
  • PyTime - A easy-use Python module which aims to operate date/time/datetime by string.
  • pytz - World timezone definitions, modern and historical. Brings the tz database into Python.
  • when.py - Providing user-friendly functions to help perform common date and time actions.
  • maya - Datetimes for Humans, Maya is mostly built around the headaches and use-cases around parsing datetime data from websites.

Debugging Tools

Libraries for debugging code.

  • pdb-like Debugger
    • ipdb - IPython-enabled pdb.
    • pdb++ - Another drop-in replacement for pdb.
    • pudb - A full-screen, console-based Python debugger.
    • remote-pdb - Remote vanilla PDB (over TCP sockets).
    • wdb - An improbable web debugger through WebSockets.
  • Profiler
  • Others
    • django-debug-toolbar - Display various debug information for Django.
    • django-devserver - A drop-in replacement for Django's runserver.
    • flask-debugtoolbar - A port of the django-debug-toolbar to flask.
    • hunter - Hunter is a flexible code tracing toolkit.
    • lptrace - strace for Python programs.
    • manhole - Debug service that will accept unix domain socket connections and present the stacktraces for all threads and an interactive prompt.
    • pyelftools - Parsing and analyzing ELF files and DWARF debugging information.
    • pyringe - Debugger capable of attaching to and injecting code into Python processes.

Deep Learning

Frameworks for Neural Networks and Deep Learning. See: awesome-deep-learning.

  • Caffe - A fast open framework for deep learning..
  • Keras - A high-level neural networks library and capable of running on top of either TensorFlow or Theano.
  • MXNet - A deep learning framework designed for both efficiency and flexibility.
  • Neupy - Running and testing different Artificial Neural Networks algorithms.
  • Pytorch - Tensors and Dynamic neural networks in Python with strong GPU acceleration.
  • Serpent.AI - Game agent framework. Use any video game as a deep learning sandbox.
  • TensorFlow - The most popular Deep Learning framework created by Google.
  • Theano - A library for fast numerical computation.

DevOps Tools

Software and libraries for DevOps.

  • Ansible - A radically simple IT automation platform.
  • Cloud-Init - A multi-distribution package that handles early initialization of a cloud instance.
  • cuisine - Chef-like functionality for Fabric.
  • Docker Compose - Fast, isolated development environments using Docker.
  • Fabric - A simple, Pythonic tool for remote execution and deployment.
  • Fabtools - Tools for writing awesome Fabric files.
  • honcho - A Python clone of Foreman, for managing Procfile-based applications.
  • OpenStack - Open source software for building private and public clouds.
  • pexpect - Controlling interactive programs in a pseudo-terminal like GNU expect.
  • psutil - A cross-platform process and system utilities module.
  • SaltStack - Infrastructure automation and management system.
  • supervisor - Supervisor process control system for UNIX.

Distribution

Libraries to create packaged executables for release distribution.

  • dh-virtualenv - Build and distribute a virtualenv as a Debian package.
  • Nuitka - Compile scripts, modules, packages to an executable or extension module.
  • py2app - Freezes Python scripts (Mac OS X).
  • py2exe - Freezes Python scripts (Windows).
  • PyInstaller - Converts Python programs into stand-alone executables (cross-platform).
  • pynsist - A tool to build Windows installers, installers bundle Python itself.

Documentation

Libraries for generating project documentation.

  • Sphinx - Python Documentation generator.
  • MkDocs - Markdown friendly documentation generator.
  • pdoc - Epydoc replacement to auto generate API documentation for Python libraries.
  • Pycco - The literate-programming-style documentation generator.

Downloader

Libraries for downloading.

  • s3cmd - A command line tool for managing Amazon S3 and CloudFront.
  • s4cmd - Super S3 command line tool, good for higher performance.
  • you-get - A YouTube/Youku/Niconico video downloader written in Python 3.
  • youtube-dl - A small command-line program to download videos from YouTube.

E-commerce

Frameworks and libraries for e-commerce and payments.

  • alipay - Unofficial Alipay API for Python.
  • Cartridge - A shopping cart app built using the Mezzanine.
  • django-oscar - An open-source e-commerce framework for Django.
  • django-shop - A Django based shop system.
  • merchant - A Django app to accept payments from various payment processors.
  • money - Money class with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.
  • python-currencies - Display money format and its filthy currencies.
  • forex-python - Foreign exchange rates, Bitcoin price index and currency conversion.
  • saleor - An e-commerce storefront for Django.
  • shoop - An open source E-Commerce platform based on Django.

Editor Plugins and IDEs

  • Emacs
    • Elpy - Emacs Python Development Environment.
  • Sublime Text
    • Anaconda - Anaconda turns your Sublime Text 3 in a full featured Python development IDE.
    • SublimeJEDI - A Sublime Text plugin to the awesome auto-complete library Jedi.
  • Vim
    • Jedi-vim - Vim bindings for the Jedi auto-completion library for Python.
    • Python-mode - An all in one plugin for turning Vim into a Python IDE.
    • YouCompleteMe - Includes Jedi-based completion engine for Python.
  • Visual Studio
    • PTVS - Python Tools for Visual Studio.
  • Visual Studio Code
    • Python - An extension with rich support for the Python language, with features including linting, IntelliSense, formatting, refactoring, debugging, unit tests, and jupyter support.
    • Magic Python - Cutting edge Python syntax highlighter for Sublime Text, Atom, and Visual Studio Code. Used by GitHub to highlight your Python code!
  • IDE
    • LiClipse - Free polyglot IDE based on Eclipse. Uses PyDev for Python support.
    • PyCharm - Commercial Python IDE by JetBrains. Has free community edition available.
    • Spyder - Open Source Python IDE.

Email

Libraries for sending and parsing email.

  • envelopes - Mailing for human beings.
  • flanker - A email address and Mime parsing library.
  • imbox - Python IMAP for Humans.
  • inbox.py - Python SMTP Server for Humans.
  • lamson - Pythonic SMTP Application Server.
  • Marrow Mailer - High-performance extensible mail delivery framework.
  • modoboa - A mail hosting and management platform including a modern and simplified Web UI.
  • Nylas Sync Engine - Providing a RESTful API on top of a powerful email sync platform.
  • yagmail - Yet another Gmail/SMTP client.

Environment Management

Libraries for Python version and environment management.

  • Pipenv - Sacred Marriage of Pipfile, Pip, & Virtualenv.
  • p - Dead simple interactive Python version management.
  • pyenv - Simple Python version management.
  • venv - (Python standard library in Python 3.3+) Creating lightweight virtual environments.
  • virtualenv - A tool to create isolated Python environments.
  • virtualenvwrapper - A set of extensions to virtualenv.

Files

Libraries for file manipulation and MIME type detection.

  • imghdr - (Python standard library) Determine the type of an image.
  • mimetypes - (Python standard library) Map filenames to MIME types.
  • path.py - A module wrapper for os.path.
  • pathlib - (Python standard library in Python 3.4+) An cross-platform, object-oriented path library.
  • python-magic - A Python interface to the libmagic file type identification library.
  • Unipath - An object-oriented approach to file/directory operations.
  • watchdog - API and shell utilities to monitor file system events.

Foreign Function Interface

Libraries for providing foreign function interface.

  • cffi - Foreign Function Interface for Python calling C code.
  • ctypes - (Python standard library) Foreign Function Interface for Python calling C code.
  • PyCUDA - A Python wrapper for Nvidia's CUDA API.
  • SWIG - Simplified Wrapper and Interface Generator.

Forms

Libraries for working with forms.

  • Deform - Python HTML form generation library influenced by the formish form generation library.
  • django-bootstrap3 - Bootstrap 3 integration with Django.
  • django-crispy-forms - A Django app which lets you create beautiful forms in a very elegant and DRY way.
  • django-remote-forms - A platform independent Django form serializer.
  • WTForms - A flexible forms validation and rendering library.

Functional Programming

Functional Programming with Python.

  • CyToolz - Cython implementation of Toolz: High performance functional utilities.
  • fn.py - Functional programming in Python: implementation of missing features to enjoy FP.
  • funcy - A fancy and practical functional tools.
  • Toolz - A collection of functional utilities for iterators, functions, and dictionaries.

GUI

Libraries for working with graphical user interface applications.

  • curses - Built-in wrapper for ncurses used to create terminal GUI applications.
  • Eel - Little library for making simple Electron-like offline HTML/JS GUI apps, with full access to Python capabilities and libraries.
  • enaml - Creating beautiful user-interfaces with Declaratic Syntax like QML.
  • Flexx - Flexx is a pure Python toolkit for creating GUI's, that uses web technology for its rendering.
  • kivy - A library for creating NUI applications, running on Windows, Linux, Mac OS X, Android and iOS.
  • pyglet - A cross-platform windowing and multimedia library for Python.
  • PyGObject - Python Bindings for GLib/GObject/GIO/GTK+ (GTK+3)
  • PyQt - Python bindings for the Qt cross-platform application and UI framework, with support for both Qt v4 and Qt v5 frameworks.
  • PySide - Python bindings for the Qt cross-platform application and UI framework, supporting the Qt v4 framework.
  • pywebview - A lightweight cross-platform native wrapper around a webview component that allows to display HTML content in its own native dedicated window
  • Tkinter - Tkinter is Python's de-facto standard GUI package.
  • Toga - A Python native, OS native GUI toolkit.
  • urwid - A library for creating terminal GUI applications with strong support for widgets, events, rich colors, etc.
  • wxPython - A blending of the wxWidgets C++ class library with the Python.

Game Development

Awesome game development libraries.

  • Cocos2d - cocos2d is a framework for building 2D games, demos, and other graphical/interactive applications. It is based on pyglet.
  • Panda3D - 3D game engine developed by Disney and maintained by Carnegie Mellon's Entertainment Technology Center. Written in C++, completely wrapped in Python.
  • Pygame - Pygame is a set of Python modules designed for writing games.
  • PyOgre - Python bindings for the Ogre 3D render engine, can be used for games, simulations, anything 3D.
  • PyOpenGL - Python ctypes bindings for OpenGL and it's related APIs.
  • PySDL2 - A ctypes based wrapper for the SDL2 library.
  • RenPy - A Visual Novel engine.

Geolocation

Libraries for geocoding addresses and working with latitudes and longitudes.

  • django-countries - A Django app that provides country choices for use with forms, flag icons static files, and a country field for models.
  • GeoDjango - A world-class geographic web framework.
  • GeoIP - Python API for MaxMind GeoIP Legacy Database.
  • geojson - Python bindings and utilities for GeoJSON.
  • geopy - Python Geocoding Toolbox.
  • pygeoip - Pure Python GeoIP API.

HTML Manipulation

Libraries for working with HTML and XML.

  • BeautifulSoup - Providing Pythonic idioms for iterating, searching, and modifying HTML or XML.
  • bleach - A whitelist-based HTML sanitization and text linkification library.
  • cssutils - A CSS library for Python.
  • html5lib - A standards-compliant library for parsing and serializing HTML documents and fragments.
  • lxml - A very fast, easy-to-use and versatile library for handling HTML and XML.
  • MarkupSafe - Implements a XML/HTML/XHTML Markup safe string for Python.
  • pyquery - A jQuery-like library for parsing HTML.
  • untangle - Converts XML documents to Python objects for easy access.
  • WeasyPrint - A visual rendering engine for HTML and CSS that can export to PDF.
  • xmldataset - Simple XML Parsing.
  • xmltodict - Working with XML feel like you are working with JSON.

HTTP

Libraries for working with HTTP.

  • grequests - requests + gevent for asynchronous HTTP requests.
  • httplib2 - Comprehensive HTTP client library.
  • requests - HTTP Requests for Humans™.
  • treq - Python requests like API built on top of Twisted's HTTP client.
  • urllib3 - A HTTP library with thread-safe connection pooling, file post support, sanity friendly.

Hardware

Libraries for programming with hardware.

  • ino - Command line toolkit for working with Arduino.
  • keyboard - Hook and simulate global keyboard events on Windows and Linux.
  • mouse - Hook and simulate global mouse events on Windows and Linux.
  • Pingo - Pingo provides a uniform API to program devices like the Raspberry Pi, pcDuino, Intel Galileo, etc.
  • Pyro - Python Robotics.
  • PyUserInput - A module for cross-platform control of the mouse and keyboard.
  • scapy - A brilliant packet manipulation library.
  • wifi - A Python library and command line tool for working with WiFi on Linux.

Imagery

Libraries for manipulating images.

  • hmap - Image histogram remapping.
  • imgSeek - A project for searching a collection of images using visual similarity.
  • nude.py - Nudity detection.
  • pagan - Retro identicon (Avatar) generation based on input string and hash.
  • pillow - Pillow is the friendly PIL fork.
  • pyBarcode - Create barcodes in Python without needing PIL.
  • pygram - Instagram-like image filters.
  • python-qrcode - A pure Python QR Code generator.
  • Quads - Computer art based on quadtrees.
  • scikit-image - A Python library for (scientific) image processing.
  • thumbor - A smart imaging service. It enables on-demand crop, re-sizing and flipping of images.
  • wand - Python bindings for MagickWand, C API for ImageMagick.

Implementations

Implementations of Python.

  • CLPython - Implementation of the Python programming language written in Common Lisp.
  • CPython - Default, most widely used implementation of the Python programming language written in C.
  • Cython - Optimizing Static Compiler for Python. Uses type mixins to compile Python into C or C++ modules resulting in large performance gains
  • Grumpy - More compiler than interpreter as more powerful CPython2.7 replacement (alpha).
  • IronPython - Implementation of the Python programming language written in C# targeting the .NET Framework and Mono.
  • Jython - Implementation of Python programming language written in Java for the Java virtual machine (JVM).
  • MicroPython - MicroPython - a lean and efficient Python programming language implementation for microcontrollers and constrained systems
  • Numba - Python JIT compiler to LLVM aimed at scientific Python.
  • PeachPy - x86-64 assembler embedded in Python. Can be used as inline assembler for Python or as a stand-alone assembler for Windows, Linux, OS X, Native Client and Go.
  • Pyjion - A JIT for Python based upon CoreCLR.
  • PyPy - Implementation of the Python programming language written in RPython and translated into C. PyPy focuses on speed, efficiency and compatibility with the original CPython interpreter. The interpreter uses black magic to make Python very fast without having to add in additional type information.
  • PySec - Hardened version of python that makes it easier for security professionals and developers to write applications more resilient to attacks and manipulations.
  • Pyston - A Python implementation built using LLVM and modern JIT techniques with the goal of achieving good performance.
  • Stackless Python - An enhanced version of the Python programming language which allows programmers to reap the benefits of thread-based programming without the performance and complexity problems associated with conventional threads.

Interactive Interpreter

Interactive Python interpreters (REPL).

Internationalization

Libraries for working with i18n.

  • Babel - An internationalization library for Python.
  • PyICU - A wrapper of International Components for Unicode C++ library (ICU).

Job Scheduler

Libraries for scheduling jobs.

  • APScheduler - A light but powerful in-process task scheduler that lets you schedule functions.
  • django-schedule - A calendaring app for Django.
  • doit - A task runner and build tool.
  • gunnery - Multipurpose task execution tool for distributed systems with web-based interface.
  • Joblib - A set of tools to provide lightweight pipelining in Python.
  • Plan - Writing crontab file in Python like a charm.
  • schedule - Python job scheduling for humans.
  • Spiff - A powerful workflow engine implemented in pure Python.
  • TaskFlow - A Python library that helps to make task execution easy, consistent and reliable.

Logging

Libraries for generating and working with logs.

  • Eliot - Logging for complex & distributed systems.
  • logbook - Logging replacement for Python.
  • logging - (Python standard library) Logging facility for Python.
  • raven - Python client for Sentry, a log/error tracking, crash reporting and aggregation platform for web applications.

Machine Learning

Libraries for Machine Learning. See: awesome-machine-learning.

MapReduce

Frameworks and libraries for MapReduce.

  • PySpark - Apache Spark Python API.
  • luigi - A module that helps you build complex pipelines of batch jobs.
  • mrjob - Run MapReduce jobs on Hadoop or Amazon Web Services.
  • streamparse - Run Python code against real-time streams of data. Integrates with Apache Storm.
  • dask - A flexible parallel computing library for analytic computing.

Microsoft Windows

Python programming on Microsoft Windows.

  • Python(x,y) - Scientific-applications-oriented Python Distribution based on Qt and Spyder.
  • pythonlibs - Unofficial Windows binaries for Python extension packages.
  • PythonNet - Python Integration with the .NET Common Language Runtime (CLR).
  • PyWin32 - Python Extensions for Windows.
  • WinPython - Portable development environment for Windows 7/8.

Miscellaneous

Useful libraries or tools that don't fit in the categories above.

  • attrs - Replacement for __init__, __eq__, __repr__, etc. boilerplate in class definitions.
  • blinker - A fast Python in-process signal/event dispatching system.
  • itsdangerous - Various helpers to pass trusted data to untrusted environments.
  • pluginbase - A simple but flexible plugin system for Python.
  • Pychievements - A framework for creating and tracking achievements.
  • Tryton - A general purpose business framework.

Natural Language Processing

Libraries for working with human languages.

  • gensim - Topic Modelling for Humans.
  • Jieba - Chinese text segmentation.
  • langid.py - Stand-alone language identification system.
  • NLTK - A leading platform for building Python programs to work with human language data.
  • Pattern - A web mining module for the Python.
  • polyglot - Natural language pipeline supporting hundreds of languages.
  • SnowNLP - A library for processing Chinese text.
  • spaCy - A library for industrial-strength natural language processing in Python and Cython.
  • TextBlob - Providing a consistent API for diving into common NLP tasks.

Network Virtualization

Tools and libraries for Virtual Networking and SDN (Software Defined Networking).

  • Mininet - A popular network emulator and API written in Python.
  • POX - An open source development platform for Python-based Software Defined Networking (SDN) control applications, such as OpenFlow SDN controllers.
  • Pyretic - A member of the Frenetic family of SDN programming languages that provides powerful abstractions over network switches or emulators.
  • SDX Platform - SDN based IXP implementation that leverages Mininet, POX and Pyretic.

Networking

Libraries for networking programming.

  • asyncio - (Python standard library) Asynchronous I/O, event loop, coroutines and tasks.
  • diesel - Greenlet-based event I/O Framework for Python.
  • pulsar - Event-driven concurrent framework for Python.
  • pyzmq - A Python wrapper for the ZeroMQ message library.
  • Twisted - An event-driven networking engine.
  • txZMQ - Twisted based wrapper for the ZeroMQ message library.
  • NAPALM - Cross-vendor API to manipulate network devices.

News Feed

Libraries for building user's activities.

ORM

Libraries that implement Object-Relational Mapping or data mapping techniques.

  • Relational Databases
    • Django Models - A part of Django.
    • SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper.
    • Orator - The Orator ORM provides a simple yet beautiful ActiveRecord implementation.
    • Peewee - A small, expressive ORM.
    • PonyORM - ORM that provides a generator-oriented interface to SQL.
    • pyDAL - A pure Python Database Abstraction Layer.
    • python-sql - Write SQL queries pythonically.
  • NoSQL Databases
  • Others
    • butterdb - A Python ORM for Google Drive Spreadsheets.
    • dataset - A JSON-based database.

Package Management

Libraries for package and dependency management.

  • pip - The Python package and dependency manager.
  • conda - Cross-platform, Python-agnostic binary package manager.
  • Curdling - Curdling is a command line tool for managing Python packages.
  • pip-tools - A set of tools to keep your pinned Python dependencies fresh.
  • wheel - The new standard of Python distribution and are intended to replace eggs.

Package Repositories

Local PyPI repository server and proxies.

  • warehouse - Next generation Python Package Repository (PyPI).
  • bandersnatch - PyPI mirroring tool provided by Python Packaging Authority (PyPA).
  • devpi - PyPI server and packaging/testing/release tool.
  • localshop - Local PyPI server (custom packages and auto-mirroring of pypi).

Permissions

Libraries that allow or deny users access to data or functionality.

  • Carteblanche - Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.
  • django-guardian - Implementation of per object permissions for Django 1.2+
  • django-rules - A tiny but powerful app providing object-level permissions to Django, without requiring a database.

Processes

Libraries for starting and communicating with OS processes.

Queue

Libraries for working with event and task queues.

  • celery - An asynchronous task queue/job queue based on distributed message passing.
  • huey - Little multi-threaded task queue.
  • mrq - Mr. Queue - A distributed worker task queue in Python using Redis & gevent.
  • rq - Simple job queues for Python.
  • simpleq - A simple, infinitely scalable, Amazon SQS based queue.

Recommender Systems

Libraries for building recommender systems.

  • annoy - Approximate Nearest Neighbors in C++/Python optimized for memory usage.
  • fastFM - A library for Factorization Machines.
  • implicit - A fast Python implementation of collaborative filtering for implicit datasets.
  • libffm - A library for Field-aware Factorization Machine (FFM).
  • LightFM - A Python implementation of a number of popular recommendation algorithms.
  • surprise - A scikit for building and analyzing recommender systems.
  • TensorRec - A Recommendation Engine Framework in TensorFlow.

RESTful API

Libraries for developing RESTful APIs.

  • Django
  • Flask
    • eve - REST API framework powered by Flask, MongoDB and good intentions.
    • flask-api-utils - Taking care of API representation and authentication for Flask.
    • flask-api - Browsable Web APIs for Flask.
    • flask-restful - Quickly building REST APIs for Flask.
    • flask-restless - Generating RESTful APIs for database models defined with SQLAlchemy.
  • Pyramid
    • cornice - A RESTful framework for Pyramid.
  • Framework agnostic
    • falcon - A high-performance framework for building cloud APIs and web app backends.
    • hug - A Python3 framework for cleanly exposing APIs over HTTP and the Command Line with automatic documentation and validation.
    • restless - Framework agnostic REST framework based on lessons learned from Tastypie.
    • ripozo - Quickly creating REST/HATEOAS/Hypermedia APIs.
    • sandman - Automated REST APIs for existing database-driven systems.
    • apistar - A smart Web API framework, designed for Python 3.

RPC Servers

RPC-compatible servers.

Science

Libraries for scientific computing.

  • astropy - A community Python library for Astronomy.
  • bcbio-nextgen - Providing best-practice pipelines for fully automated high throughput sequencing analysis.
  • bccb - Collection of useful code related to biological analysis.
  • Biopython - Biopython is a set of freely available tools for biological computation.
  • cclib - A library for parsing and interpreting the results of computational chemistry packages.
  • Colour - A colour science package implementing a comprehensive number of colour theory transformations and algorithms.
  • NetworkX - A high-productivity software for complex networks.
  • NIPY - A collection of neuroimaging toolkits.
  • NumPy - A fundamental package for scientific computing with Python.
  • Open Babel - A chemical toolbox designed to speak the many languages of chemical data.
  • ObsPy - A Python toolbox for seismology.
  • PyDy - Short for Python Dynamics, used to assist with workflow in the modeling of dynamic motion.
  • PyMC - Markov Chain Monte Carlo sampling toolkit.
  • RDKit - Cheminformatics and Machine Learning Software.
  • SciPy - A Python-based ecosystem of open-source software for mathematics, science, and engineering.
  • statsmodels - Statistical modeling and econometrics in Python.
  • SymPy - A Python library for symbolic mathematics.
  • Zipline - A Pythonic algorithmic trading library.
  • SimPy - A process-based discrete-event simulation framework.

Search

Libraries and software for indexing and performing search queries on data.

Serialization

Libraries for serializing complex data types

  • marshmallow - marshmallow is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes.

Serverless Frameworks

Frameworks for developing serverless Python code.

  • apex - Build, deploy, and manage AWS Lambda functions with ease.
  • python-lambda - A toolkit for developing and deploying Python code in AWS Lambda.
  • Zappa - A tool for deploying WSGI applications on AWS Lambda and API Gateway.

Specific Formats Processing

Libraries for parsing and manipulating specific text formats.

  • General
    • tablib - A module for Tabular Datasets in XLS, CSV, JSON, YAML.
  • Office
    • Marmir - Takes Python data structures and turns them into spreadsheets.
    • openpyxl - A library for reading and writing Excel 2010 xlsx/xlsm/xltx/xltm files.
    • pyexcel - Providing one API for reading, manipulating and writing csv, ods, xls, xlsx and xlsm files.
    • python-docx - Reads, queries and modifies Microsoft Word 2007/2008 docx files.
    • python-pptx - Python library for creating and updating PowerPoint (.pptx) files.
    • relatorio - Templating OpenDocument files.
    • unoconv - Convert between any document format supported by LibreOffice/OpenOffice.
    • XlsxWriter - A Python module for creating Excel .xlsx files.
    • xlwings - A BSD-licensed library that makes it easy to call Python from Excel and vice versa.
    • xlwt / xlrd - Writing and reading data and formatting information from Excel files.
  • PDF
    • PDFMiner - A tool for extracting information from PDF documents.
    • PyPDF2 - A library capable of splitting, merging and transforming PDF pages.
    • ReportLab - Allowing Rapid creation of rich PDF documents.
  • Markdown
    • Mistune - Fastest and full featured pure Python parsers of Markdown.
    • Python-Markdown - A Python implementation of John Gruber’s Markdown.
  • YAML
    • PyYAML - YAML implementations for Python.
  • CSV
    • csvkit - Utilities for converting to and working with CSV.
  • Archive
    • unp - A command line tool that can unpack archives easily.

Static Site Generator

Static site generator is a software that takes some text + templates as input and produces HTML files on the output.

  • Cactus - Static site generator for designers.
  • Hyde - Jinja2-based static web site generator.
  • Lektor - An easy to use static CMS and blog engine.
  • Nikola - A static website and blog generator.
  • Pelican - Uses Markdown or ReST for content and Jinja 2 for themes. Supports DVCS, Disqus. AGPL.
  • Tinkerer - Tinkerer is a blogging engine/.static website generator powered by Sphinx.

Tagging

Libraries for tagging items.

Template Engine

Libraries and tools for templating and lexing.

  • Genshi - Python templating toolkit for generation of web-aware output.
  • Jinja2 - A modern and designer friendly templating language.
  • Mako - Hyperfast and lightweight templating for the Python platform.

Testing

Libraries for testing codebases and generating test data.

  • Testing Frameworks
    • hypothesis - Hypothesis is an advanced Quickcheck style property based testing library.
    • mamba - The definitive testing tool for Python. Born under the banner of BDD.
    • nose - A nicer unittest for Python.
    • nose2 - The successor to nose, based on unittest2.
    • pytest - A mature full-featured Python testing tool.
    • Robot Framework - A generic test automation framework.
    • unittest - (Python standard library) Unit testing framework.
  • Test Runners
    • green - A clean, colorful test runner.
    • tox - Auto builds and tests distributions in multiple Python versions
  • GUI / Web Testing
    • locust - Scalable user load testing tool written in Python.
    • PyAutoGUI - PyAutoGUI is a cross-platform GUI automation Python module for human beings.
    • Selenium - Python bindings for Selenium WebDriver.
    • sixpack - A language-agnostic A/B Testing framework.
    • splinter - Open source tool for testing web applications.
  • Mock
    • doublex - Powerful test doubles framework for Python.
    • freezegun - Travel through time by mocking the datetime module.
    • httmock - A mocking library for requests for Python 2.6+ and 3.2+.
    • httpretty - HTTP request mock tool for Python.
    • mock - (Python standard library) A mocking and patching library.
    • Mocket - Socket Mock Framework plus HTTP[S]/asyncio/gevent mocking library with recording/replaying capability.
    • responses - A utility library for mocking out the requests Python library.
    • VCR.py - Record and replay HTTP interactions on your tests.
  • Object Factories
    • factory_boy - A test fixtures replacement for Python.
    • mixer - Another fixtures replacement. Supported Django, Flask, SQLAlchemy, Peewee and etc.
    • model_mommy - Creating random fixtures for testing in Django.
  • Code Coverage
  • Fake Data
    • mimesis - is a Python library that help you generate fake data.
    • fake2db - Fake database generator.
    • faker - A Python package that generates fake data.
    • radar - Generate random datetime / time.
  • Error Handler
    • FuckIt.py - FuckIt.py uses state-of-the-art technology to make sure your Python code runs whether it has any right to or not.

Text Processing

Libraries for parsing and manipulating plain texts.

  • General
    • chardet - Python 2/3 compatible character encoding detector.
    • difflib - (Python standard library) Helpers for computing deltas.
    • ftfy - Makes Unicode text less broken and more consistent automagically.
    • fuzzywuzzy - Fuzzy String Matching.
    • Levenshtein - Fast computation of Levenshtein distance and string similarity.
    • pangu.py - Spacing texts for CJK and alphanumerics.
    • pyfiglet - An implementation of figlet written in Python.
    • pypinyin - Convert Chinese hanzi to pinyin.
    • shortuuid - A generator library for concise, unambiguous and URL-safe UUIDs.
    • unidecode - ASCII transliterations of Unicode text.
    • uniout - Print readable chars instead of the escaped string.
    • xpinyin - A library to translate Chinese hanzi (漢字) to pinyin (拼音).
  • Slugify
    • awesome-slugify - A Python slugify library that can preserve unicode.
    • python-slugify - A Python slugify library that translates unicode to ASCII.
    • unicode-slugify - A slugifier that generates unicode slugs with Django as a dependency.
  • Parser
    • phonenumbers - Parsing, formatting, storing and validating international phone numbers.
    • PLY - Implementation of lex and yacc parsing tools for Python
    • Pygments - A generic syntax highlighter.
    • pyparsing - A general purpose framework for generating parsers.
    • python-nameparser - Parsing human names into their individual components.
    • python-user-agents - Browser user agent parser.
    • sqlparse - A non-validating SQL parser.

Third-party APIs

Libraries for accessing third party services APIs. See: List of Python API Wrappers and Libraries.

URL Manipulation

Libraries for parsing URLs.

  • furl - A small Python library that makes parsing and manipulating URLs easy.
  • purl - A simple, immutable URL class with a clean API for interrogation and manipulation.
  • pyshorteners - A pure Python URL shortening lib.
  • short_url - Python implementation for generating Tiny URL and bit.ly-like URLs.
  • webargs - A friendly library for parsing HTTP request arguments, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, and Pyramid.

Video

Libraries for manipulating video and GIFs.

  • moviepy - A module for script-based movie editing with many formats, including animated GIFs.
  • scikit-video - Video processing routines for SciPy.

WSGI Servers

WSGI-compatible web servers.

  • bjoern - Asynchronous, very fast and written in C.
  • fapws3 - Asynchronous (network side only), written in C.
  • gunicorn - Pre-forked, partly written in C.
  • meinheld - Asynchronous, partly written in C.
  • netius - Asynchronous, very fast.
  • paste - Multi-threaded, stable, tried and tested.
  • rocket - Multi-threaded.
  • uWSGI - A project aims at developing a full stack for building hosting services, written in C.
  • waitress - Multi-threaded, powers Pyramid.
  • Werkzeug - A WSGI utility library for Python that powers Flask and can easily be embedded into your own projects.

Web Content Extracting

Libraries for extracting web contents.

  • Haul - An Extensible Image Crawler.
  • html2text - Convert HTML to Markdown-formatted text.
  • lassie - Web Content Retrieval for Humans.
  • micawber - A small library for extracting rich content from URLs.
  • newspaper - News extraction, article extraction and content curation in Python.
  • opengraph - A Python module to parse the Open Graph Protocol
  • python-goose - HTML Content/Article Extractor.
  • python-readability - Fast Python port of arc90's readability tool.
  • sanitize - Bringing sanity to world of messed-up data.
  • sumy - A module for automatic summarization of text documents and HTML pages.
  • textract - Extract text from any document, Word, PowerPoint, PDFs, etc.
  • toapi - Every web site provides APIs

Web Crawling

Libraries for scraping websites.

  • cola - A distributed crawling framework.
  • Demiurge - PyQuery-based scraping micro-framework.
  • feedparser - Universal feed parser.
  • Grab - Site scraping framework.
  • MechanicalSoup - A Python library for automating interaction with websites.
  • portia - Visual scraping for Scrapy.
  • pyspider - A powerful spider system.
  • RoboBrowser - A simple, Pythonic library for browsing the web without a standalone web browser.
  • Scrapy - A fast high-level screen scraping and web crawling framework.

Web Frameworks

Full stack web frameworks.

  • Bottle - A fast, simple and lightweight WSGI micro web-framework.
  • CherryPy - A minimalist Python web framework, HTTP/1.1-compliant and WSGI thread-pooled.
  • Dash - Built on top of Flask, React and Plotly aimed at analytical web applications.
  • Django - The most popular web framework in Python.
  • Flask - A microframework for Python.
  • Pyramid - A small, fast, down-to-earth, open source Python web framework.
  • Sanic - Web server that's written to go fast.
  • Tornado - A Web framework and asynchronous networking library.

WebSocket

Libraries for working with WebSocket.

Services

Online tools and APIs to simplify development.

Continuous Integration

See: awesome-CIandCD.

  • CircleCI - A CI service that can run very fast parallel testing. (GitHub only)
  • Travis CI - A popular CI service for your open source and private projects. (GitHub only)
  • Vexor CI - A continuous integration tool for private apps with pay-per-minute billing model.
  • Wercker - A Docker-based platform for building and deploying applications and microservices.

Code Quality

  • Codacy - Automated Code Review to ship better code, faster.
  • Codecov - Code coverage dashboard.
  • CodeFactor - Automated Code Review for Git.
  • Landscape - Hosted continuous Python code metrics.

Resources

Where to discover new Python libraries.

Podcasts

Twitter

Websites

Weekly

Other Awesome Lists

List of lists.

Contributing

Your contributions are always welcome! Please take a look at the contribution guidelines first.

I will keep some pull requests open if I'm not sure whether those libraries are awesome, you could vote for them by adding 👍 to them. Pull requests will be merged when their votes reach 20.


If you have any question about this opinionated list, do not hesitate to contact me @vinta on Twitter or open an issue on GitHub.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - Microsoft/vscode: Visual Studio Code
Skip to content
TypeScript JavaScript CSS Inno Setup Shell HTML Other
Switch branches/tags
Permalink
Failed to load latest commit information.
.github Use time zones for readability Feb 20, 2018
.vscode Adding basic test for markdown Feb 8, 2018
build node-debug@1.21.2 Feb 20, 2018
extensions folding provider: first version Feb 22, 2018
i18n 2018-02-06. Merged in translations from Transifex. (#43060) Feb 7, 2018
resources Making the script work with both Python2 and 3 Feb 10, 2018
scripts builtin: manage extensions Jan 30, 2018
src update DAP to 1.27.0-pre.0 Feb 22, 2018
test search into panel Feb 16, 2018
.editorconfig remove shrinkwrap references Nov 14, 2017
.eslintrc fix vscode gulpfile to use yarn to discover dependencies Nov 14, 2017
.gitignore added yarn-error.log to .gitignore Nov 19, 2017
.mention-bot update mention bot configuration Jul 11, 2016
.nvmrc Merge with master Dec 12, 2017
.travis.yml Move webhook to https Feb 14, 2018
.yarnrc yarn: initial commit Nov 13, 2017
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Aug 26, 2017
CONTRIBUTING.md Update CONTRIBUTING.md (#36673) Nov 18, 2017
LICENSE.txt Add range on the copyright year Jan 12, 2017
OSSREADME.json Remove inline license (See nojvek/noice-json-rpc#6) Feb 1, 2018
README.md See #35972 Oct 24, 2017
ThirdPartyNotices.txt Updating OSS tool results Feb 1, 2018
appveyor.yml Revert "workaround #41268" Jan 8, 2018
gulpfile.js catch unhandled promise rejections in build Jan 13, 2017
package.json update DAP to 1.27.0-pre.0 Feb 22, 2018
product.json Include extensionAllowedProposedApi extensions in OSS product.json Jan 29, 2018
tsfmt.json Add typescript and javascript format.insertSpaceBeforeFunctionParenth… Mar 2, 2017
tslint.json some polish and fixes Jan 19, 2018
yarn.lock Support additional term alt sequences Feb 21, 2018

README.md

Visual Studio Code - Open Source

Build Status Build Status Coverage Status Gitter

VS Code is a new type of tool that combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle. Code provides comprehensive editing and debugging support, an extensibility model, and lightweight integration with existing tools.

VS Code is updated monthly with new features and bug fixes. You can download it for Windows, macOS, and Linux on VS Code's website. To get the latest releases every day, you can install the Insiders version of VS Code. This builds from the master branch and is updated at least daily.

VS Code in action

The vscode repository is where we do development and there are many ways you can participate in the project, for example:

Contributing

If you are interested in fixing issues and contributing directly to the code base, please see the document How to Contribute, which covers the following:

Please see also our Code of Conduct.

Feedback

Related Projects

Many of the core components and extensions to Code live in their own repositories on GitHub. For example, the node debug adapter and the mono debug adapter.

For a complete list, please see the Related Projects page on our wiki.

License

Copyright (c) Microsoft Corporation. All rights reserved.

Licensed under the MIT License.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - facebook/create-react-app: Create React apps with no build configuration.
Skip to content
Create React apps with no build configuration.
JavaScript Shell Other
Switch branches/tags
v1.1.1 v1.1.0 v1.0.17 v1.0.16 v1.0.15 v1.0.13 v1.0.12 v1.0.11 v1.0.10 v1.0.9 v1.0.8 v1.0.7 v1.0.6 v1.0.5 v1.0.4 v1.0.3 v1.0.2 v1.0.1 v1.0.0 v0.9.5 v0.9.4 v0.9.3 v0.9.2 v0.9.1 v0.9.0 v0.8.5 v0.8.4 v0.8.3 v0.8.2 v0.8.1 v0.8.1-public-url v0.8.1-babel-fixes+public-url v0.8.0 v0.7.0 v0.7.0-public-url v0.6.1 v0.6.0 v0.5.1 v0.5.0 v0.4.3 v0.4.2 v0.4.1 v0.4.0 v0.3.1 v0.3.0 v0.2.3 v0.2.2 v0.2.1 v0.2.0 v0.1.0 timer-react-scripts@0.8.2 timer-react-scripts@0.7.1 react-scripts@1.1.1 react-scripts@1.1.0 react-scripts@1.0.17 react-scripts@1.0.16 react-scripts@1.0.15 react-scripts@1.0.14 react-scripts@1.0.13 react-scripts@1.0.12 react-scripts@1.0.10 react-scripts@1.0.9 react-scripts@1.0.8 react-scripts@1.0.7 react-scripts@1.0.6 react-scripts@1.0.5 react-scripts@1.0.4 react-scripts@1.0.3 react-scripts@1.0.2 react-scripts@1.0.1 react-scripts@1.0.0 react-scripts@0.9.5 react-scripts@0.9.4 react-scripts@0.9.3 react-scripts@0.9.1 react-scripts@0.9.0 react-scripts@0.8.5 react-scripts@0.8.4 react-scripts@0.8.3 react-scripts@0.8.2 react-scripts@0.8.1 react-scripts@0.8.0 react-scripts@0.7.0 react-scripts@0.6.1 react-scripts@0.5.0 react-error-overlay@4.0.0 react-error-overlay@3.0.0 react-error-overlay@2.0.2 react-error-overlay@2.0.1 react-error-overlay@2.0.0 react-error-overlay@1.0.9 react-error-overlay@1.0.8 react-error-overlay@1.0.7 react-error-overlay@1.0.6 react-error-overlay@1.0.5 react-error-overlay@1.0.4 react-error-overlay@1.0.3 react-error-overlay@1.0.2 react-error-overlay@1.0.1 react-error-overlay@1.0.0
Nothing to show
Latest commit e9abde7 Feb 12, 2018
petetnt and gaearon Alphabetize and clean files-array in react-dev-utils package.json (#4016
)

Signed-off-by: petetnt <pete.a.nykanen@gmail.com>

README.md

Create React App Build Status

Create React apps with no build configuration.

Create React App works on macOS, Windows, and Linux.
If something doesn’t work, please file an issue.

Quick Overview

npx create-react-app my-app
cd my-app
npm start

(npx comes with npm 5.2+ and higher, see instructions for older npm versions)

Then open http://localhost:3000/ to see your app.
When you’re ready to deploy to production, create a minified bundle with npm run build.

npm start

Get Started Immediately

You don’t need to install or configure tools like Webpack or Babel.
They are preconfigured and hidden so that you can focus on the code.

Just create a project, and you’re good to go.

Creating an App

You’ll need to have Node >= 6 on your local development machine (but it’s not required on the server). You can use nvm (macOS/Linux) or nvm-windows to easily switch Node versions between different projects.

To create a new app, run a single command:

npx create-react-app my-app

(npx comes with npm 5.2+ and higher, see instructions for older npm versions)

It will create a directory called my-app inside the current folder.
Inside that directory, it will generate the initial project structure and install the transitive dependencies:

my-app
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│   └── favicon.ico
│   └── index.html
│   └── manifest.json
└── src
    └── App.css
    └── App.js
    └── App.test.js
    └── index.css
    └── index.js
    └── logo.svg
    └── registerServiceWorker.js

No configuration or complicated folder structures, just the files you need to build your app.
Once the installation is done, you can open your project folder:

cd my-app

Inside the newly created project, you can run some built-in commands:

npm start or yarn start

Runs the app in development mode.
Open http://localhost:3000 to view it in the browser.

The page will automatically reload if you make changes to the code.
You will see the build errors and lint warnings in the console.

Build errors

npm test or yarn test

Runs the test watcher in an interactive mode.
By default, runs tests related to files changed since the last commit.

Read more about testing.

npm run build or yarn build

Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.
By default, it also includes a service worker so that your app loads from local cache on future visits.

Your app is ready to be deployed.

User Guide

The User Guide includes information on different topics, such as:

A copy of the user guide will be created as README.md in your project folder.

How to Update to New Versions?

Please refer to the User Guide for this and other information.

Philosophy

  • One Dependency: There is just one build dependency. It uses Webpack, Babel, ESLint, and other amazing projects, but provides a cohesive curated experience on top of them.

  • No Configuration Required: You don't need to configure anything. Reasonably good configuration of both development and production builds is handled for you so you can focus on writing code.

  • No Lock-In: You can “eject” to a custom setup at any time. Run a single command, and all the configuration and build dependencies will be moved directly into your project, so you can pick up right where you left off.

What’s Included?

Your environment will have everything you need to build a modern single-page React app:

  • React, JSX, ES6, and Flow syntax support.
  • Language extras beyond ES6 like the object spread operator.
  • Autoprefixed CSS, so you don’t need -webkit- or other prefixes.
  • A fast interactive unit test runner with built-in support for coverage reporting.
  • A live development server that warns about common mistakes.
  • A build script to bundle JS, CSS, and images for production, with hashes and sourcemaps.
  • An offline-first service worker and a web app manifest, meeting all the Progressive Web App criteria.
  • Hassle-free updates for the above tools with a single dependency.

Check out this guide for an overview of how these tools fit together.

The tradeoff is that these tools are preconfigured to work in a specific way. If your project needs more customization, you can "eject" and customize it, but then you will need to maintain this configuration.

Popular Alternatives

Create React App is a great fit for:

  • Learning React in a comfortable and feature-rich development environment.
  • Starting new single-page React applications.
  • Creating examples with React for your libraries and components.

Here’s a few common cases where you might want to try something else:

  • If you want to try React without hundreds of transitive build tool dependencies, consider using a single HTML file or an online sandbox instead.

  • If you need to integrate React code with a server-side template framework like Rails or Django, or if you’re not building a single-page app, consider using nwb, or Neutrino which are more flexible. For Rails specifically, you can use Rails Webpacker.

  • If you need to publish a React component, nwb can also do this, as well as Neutrino's react-components preset.

  • If you want to do server rendering with React and Node.js, check out Next.js or Razzle. Create React App is agnostic of the backend, and just produces static HTML/JS/CSS bundles.

  • If your website is mostly static (for example, a portfolio or a blog), consider using Gatsby instead. Unlike Create React App, it pre-renders the website into HTML at the build time.

  • If you want to use TypeScript, consider using create-react-app-typescript.

  • Finally, if you need more customization, check out Neutrino and its React preset.

All of the above tools can work with little to no configuration.

If you prefer configuring the build yourself, follow this guide.

Contributing

We'd love to have your helping hand on create-react-app! See CONTRIBUTING.md for more information on what we're looking for and how to get started.

React Native

Looking for something similar, but for React Native?
Check out Create React Native App.

Acknowledgements

We are grateful to the authors of existing related projects for their ideas and collaboration:

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - atom/atom: The hackable text editor
Skip to content
JavaScript CoffeeScript Other
Switch branches/tags
Latest commit fa9c8d1 Feb 22, 2018
captbaritone Merge pull request #16661 from captbaritone/context-menu-order-master
Enable packages to control order of context menu items
Permalink
Failed to load latest commit information.
.github Add indentation to force YAML to leave certain lines the way they are Oct 7, 2017
apm ⬆️ apm@1.19.0 Jan 3, 2018
benchmarks Make assignLanguageMode take a language id instead of a language name Nov 28, 2017
docs Update 2018-02-19.md Feb 21, 2018
dot-atom Fixed links in keymap.cson Aug 7, 2017
exports Replace import and export keywords with `require` and `module.exports` Jan 19, 2018
keymaps Tweak syntax selection key bindings Dec 27, 2017
menus Add `Paste without reformatting` command Oct 23, 2017
resources 🍎 Fix faded app icons on macOS 10.13 Sep 27, 2017
script Replace csslint with stylelint (#16803) Feb 22, 2018
spec Merge pull request #16661 from captbaritone/context-menu-order-master Feb 22, 2018
src Merge pull request #16661 from captbaritone/context-menu-order-master Feb 22, 2018
static Add custom properties to atom-workspace to track editor properties (#… Feb 22, 2018
vendor Allow elements to be passed to toContain matcher Sep 19, 2015
.coffeelintignore Remove mentions of benchmarks from the build, command palette Sep 19, 2015
.gitattributes Optimize bash Windows, force LF line endings May 16, 2016
.gitignore Rename cachePath to electronDownloadPath Aug 11, 2016
.python-version Revert "⬆️ python@2.7.14" Sep 28, 2017
.travis.yml Try alternate way of getting right python Dec 13, 2017
CHANGELOG.md 🔥 CHANGELOG.md Jan 11, 2016
CODE_OF_CONDUCT.md Docs: Update HTTP -> HTTPS Dec 26, 2017
CONTRIBUTING.md 📝 `[ci skip]` must be in the title for Appveyor Jan 18, 2018
Dockerfile Update builds to include libsecret Apr 20, 2017
ISSUE_TEMPLATE.md Docs: Update HTTP -> HTTPS Dec 26, 2017
LICENSE.md Update license year Dec 31, 2017
PULL_REQUEST_TEMPLATE.md Add "Verification Process" section to pull request template Jan 3, 2018
README.md Fix filename backtick inconsistency and fix wording in README Jan 18, 2018
SUPPORT.md Change HTTP Links to HTTPS in SUPPORT.md Nov 13, 2017
appveyor.yml Be kind to build queue: Skip installer for non-release/non-master branch Jan 11, 2018
atom.sh Add dev channel atom.sh Aug 30, 2017
circle.yml Use TEST_JUNIT_XML_ROOT instead of the CircleCI-specific root Aug 1, 2017
coffeelint.json 🔥 Remove newlines_after_classes rule May 23, 2015
package.json ⬆️ atom-keymap Feb 21, 2018
stylelint.config.js Replace csslint with stylelint (#16803) Feb 22, 2018

README.md

Atom

macOS Build Status Linux Build Status Windows Build Status Dependency Status Join the Atom Community on Slack

Atom is a hackable text editor for the 21st century, built on Electron, and based on everything we love about our favorite editors. We designed it to be deeply customizable, but still approachable using the default configuration.

Visit atom.io to learn more or visit the Atom forum.

Follow @AtomEditor on Twitter for important announcements.

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to atom@github.com.

Documentation

If you want to read about using Atom or developing packages in Atom, the Atom Flight Manual is free and available online. You can find the source to the manual in atom/flight-manual.atom.io.

The API reference for developing packages is also documented on Atom.io.

Installing

Prerequisites

macOS

Download the latest Atom release.

Atom will automatically update when a new release is available.

Windows

Download the latest Atom installer. AtomSetup.exe is 32-bit. For 64-bit systems, download AtomSetup-x64.exe.

Atom will automatically update when a new release is available.

You can also download atom-windows.zip (32-bit) or atom-x64-windows.zip (64-bit) from the releases page. The .zip version will not automatically update.

Using Chocolatey? Run cinst Atom to install the latest version of Atom.

Linux

Atom is only available for 64-bit Linux systems.

Configure your distribution's package manager to install and update Atom by following the Linux installation instructions in the Flight Manual. You will also find instructions on how to install Atom's official Linux packages without using a package repository, though you will not get automatic updates after installing Atom this way.

Archive extraction

An archive is available for people who don't want to install atom as root.

This version enables you to install multiple Atom versions in parallel. It has been built on Ubuntu 64-bit, but should be compatible with other Linux distributions.

  1. Install dependencies (on Ubuntu): sudo apt install git gconf2 gconf-service libgtk2.0-0 libudev1 libgcrypt20 libnotify4 libxtst6 libnss3 python gvfs-bin xdg-utils libcap2
  2. Download atom-amd64.tar.gz from the Atom releases page.
  3. Run tar xf atom-amd64.tar.gz in the directory where you want to extract the Atom folder.
  4. Launch Atom using the installed atom command from the newly extracted directory.

The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases.

Building

License

MIT

When using the Atom or other GitHub logos, be sure to follow the GitHub logo guidelines.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - apple/swift: The Swift Programming Language
Skip to content
The Swift Programming Language
C++ Swift Python CMake Objective-C Objective-C++ Other
Switch branches/tags
type-name-lookup-fail swift-DEVELOPMENT-SNAPSHOT-2018-02-21-a swift-DEVELOPMENT-SNAPSHOT-2018-02-20-a swift-DEVELOPMENT-SNAPSHOT-2018-02-19-a swift-DEVELOPMENT-SNAPSHOT-2018-02-18-a swift-DEVELOPMENT-SNAPSHOT-2018-02-17-a swift-DEVELOPMENT-SNAPSHOT-2018-02-16-a swift-DEVELOPMENT-SNAPSHOT-2018-02-14-a swift-DEVELOPMENT-SNAPSHOT-2018-02-13-a swift-DEVELOPMENT-SNAPSHOT-2018-02-08-a swift-DEVELOPMENT-SNAPSHOT-2018-02-07-a swift-DEVELOPMENT-SNAPSHOT-2018-02-06-a swift-DEVELOPMENT-SNAPSHOT-2018-01-30-a swift-DEVELOPMENT-SNAPSHOT-2018-01-29-a swift-DEVELOPMENT-SNAPSHOT-2018-01-28-a swift-DEVELOPMENT-SNAPSHOT-2018-01-27-a swift-DEVELOPMENT-SNAPSHOT-2018-01-26-a swift-DEVELOPMENT-SNAPSHOT-2018-01-25-a swift-DEVELOPMENT-SNAPSHOT-2018-01-21-a swift-DEVELOPMENT-SNAPSHOT-2018-01-20-a swift-DEVELOPMENT-SNAPSHOT-2018-01-17-a swift-DEVELOPMENT-SNAPSHOT-2018-01-15-a swift-DEVELOPMENT-SNAPSHOT-2018-01-14-a swift-DEVELOPMENT-SNAPSHOT-2018-01-13-a swift-DEVELOPMENT-SNAPSHOT-2018-01-12-a swift-DEVELOPMENT-SNAPSHOT-2018-01-10-a swift-DEVELOPMENT-SNAPSHOT-2018-01-09-a swift-DEVELOPMENT-SNAPSHOT-2017-12-30-a swift-DEVELOPMENT-SNAPSHOT-2017-12-29-a swift-DEVELOPMENT-SNAPSHOT-2017-12-28-a swift-DEVELOPMENT-SNAPSHOT-2017-12-27-a swift-DEVELOPMENT-SNAPSHOT-2017-12-26-a swift-DEVELOPMENT-SNAPSHOT-2017-12-25-a swift-DEVELOPMENT-SNAPSHOT-2017-12-24-a swift-DEVELOPMENT-SNAPSHOT-2017-12-23-a swift-DEVELOPMENT-SNAPSHOT-2017-12-22-a swift-DEVELOPMENT-SNAPSHOT-2017-12-21-a swift-DEVELOPMENT-SNAPSHOT-2017-12-20-a swift-DEVELOPMENT-SNAPSHOT-2017-12-19-a swift-DEVELOPMENT-SNAPSHOT-2017-12-18-a swift-DEVELOPMENT-SNAPSHOT-2017-12-17-a swift-DEVELOPMENT-SNAPSHOT-2017-12-16-a swift-DEVELOPMENT-SNAPSHOT-2017-12-15-a swift-DEVELOPMENT-SNAPSHOT-2017-12-14-a swift-DEVELOPMENT-SNAPSHOT-2017-12-13-a swift-DEVELOPMENT-SNAPSHOT-2017-12-12-a swift-DEVELOPMENT-SNAPSHOT-2017-12-11-a swift-DEVELOPMENT-SNAPSHOT-2017-12-10-a swift-DEVELOPMENT-SNAPSHOT-2017-12-09-a swift-DEVELOPMENT-SNAPSHOT-2017-12-08-a swift-DEVELOPMENT-SNAPSHOT-2017-12-07-a swift-DEVELOPMENT-SNAPSHOT-2017-12-06-a swift-DEVELOPMENT-SNAPSHOT-2017-12-05-a swift-DEVELOPMENT-SNAPSHOT-2017-12-04-a swift-DEVELOPMENT-SNAPSHOT-2017-12-03-a swift-DEVELOPMENT-SNAPSHOT-2017-11-28-a swift-DEVELOPMENT-SNAPSHOT-2017-11-27-a swift-DEVELOPMENT-SNAPSHOT-2017-11-26-a swift-DEVELOPMENT-SNAPSHOT-2017-11-25-a swift-DEVELOPMENT-SNAPSHOT-2017-11-24-a swift-DEVELOPMENT-SNAPSHOT-2017-11-23-a swift-DEVELOPMENT-SNAPSHOT-2017-11-22-a swift-DEVELOPMENT-SNAPSHOT-2017-11-21-a swift-DEVELOPMENT-SNAPSHOT-2017-11-16-a swift-DEVELOPMENT-SNAPSHOT-2017-11-14-a swift-DEVELOPMENT-SNAPSHOT-2017-11-13-a swift-DEVELOPMENT-SNAPSHOT-2017-11-09-a swift-DEVELOPMENT-SNAPSHOT-2017-11-08-a swift-DEVELOPMENT-SNAPSHOT-2017-11-07-a swift-DEVELOPMENT-SNAPSHOT-2017-11-06-a swift-DEVELOPMENT-SNAPSHOT-2017-11-05-a swift-DEVELOPMENT-SNAPSHOT-2017-11-04-a swift-DEVELOPMENT-SNAPSHOT-2017-11-03-a swift-DEVELOPMENT-SNAPSHOT-2017-11-02-a swift-DEVELOPMENT-SNAPSHOT-2017-11-01-a swift-DEVELOPMENT-SNAPSHOT-2017-10-31-a swift-DEVELOPMENT-SNAPSHOT-2017-10-30-a swift-DEVELOPMENT-SNAPSHOT-2017-10-29-a swift-DEVELOPMENT-SNAPSHOT-2017-10-28-a swift-DEVELOPMENT-SNAPSHOT-2017-10-27-a swift-DEVELOPMENT-SNAPSHOT-2017-10-26-a swift-DEVELOPMENT-SNAPSHOT-2017-10-25-a swift-DEVELOPMENT-SNAPSHOT-2017-10-24-a swift-DEVELOPMENT-SNAPSHOT-2017-10-23-a swift-DEVELOPMENT-SNAPSHOT-2017-10-22-a swift-DEVELOPMENT-SNAPSHOT-2017-10-21-a swift-DEVELOPMENT-SNAPSHOT-2017-10-20-a swift-DEVELOPMENT-SNAPSHOT-2017-10-19-a swift-DEVELOPMENT-SNAPSHOT-2017-10-18-a swift-DEVELOPMENT-SNAPSHOT-2017-10-17-a swift-DEVELOPMENT-SNAPSHOT-2017-10-16-a swift-DEVELOPMENT-SNAPSHOT-2017-10-15-a swift-DEVELOPMENT-SNAPSHOT-2017-10-14-a swift-DEVELOPMENT-SNAPSHOT-2017-10-12-a swift-DEVELOPMENT-SNAPSHOT-2017-10-10-a swift-DEVELOPMENT-SNAPSHOT-2017-10-09-a swift-DEVELOPMENT-SNAPSHOT-2017-10-08-a swift-DEVELOPMENT-SNAPSHOT-2017-10-07-a swift-DEVELOPMENT-SNAPSHOT-2017-10-06-a swift-DEVELOPMENT-SNAPSHOT-2017-09-30-a
Nothing to show
Permalink
Failed to load latest commit information.
.github Reduce boilerplate in the GitHub PR template Aug 27, 2016
apinotes OS X -> macOS Oct 21, 2017
benchmark Merge pull request #14662 from airspeedswift/remove-where-benchmark Feb 16, 2018
bindings/xml [Markup] Print Tags in documentation comment XML Jun 22, 2017
cmake cmake: mark recently added python files as gyb dependencies. Feb 21, 2018
docs [Docs] Explain batch mode a bit, in DriverInternals.rst Feb 22, 2018
include Merge pull request #14703 from graydon/profile-stats Feb 22, 2018
lib Merge pull request #14774 from rudkx/cs-check-type-before-getting Feb 22, 2018
stdlib Tweak _SwiftDispatchOverlayShims for use by swift-corelibs-libdispatc… Feb 22, 2018
test Merge pull request #14703 from graydon/profile-stats Feb 22, 2018
tools [SourceKit] Add syntaxtype for #error/#warning (#14742) Feb 21, 2018
unittests Merge pull request #14564 from compnerd/export Feb 14, 2018
utils Merge pull request #14772 from compnerd/another-one-bites-the-dust Feb 22, 2018
validation-test Ditched the simple/complex test distinction as they all pass now (#20) Feb 19, 2018
.clang-format Add a .clang-format file Feb 14, 2014
.dir-locals.el .dir-locals.el: add flycheck setting for c++14 Jan 13, 2018
.flake8 [gardening] Fix invalid references in .flake8 Apr 11, 2017
.gitignore Added documentation and test coverage. Jun 1, 2017
CHANGELOG.md Fix changelog entry for SE-0143 Feb 3, 2018
CMakeLists.txt build: avoid incremental links with link.exe Feb 12, 2018
CODE_OF_CONDUCT.md Created a clone of the code of conduct on Swift.org Oct 4, 2017
CODE_OWNERS.TXT CODE_OWNERS: Assign Max to all other overlays Nov 7, 2017
CONTRIBUTING.md Reduce boilerplate in the GitHub PR template Aug 27, 2016
LICENSE.txt [gardening] Fix accidental trailing whitespace. Oct 29, 2016
README.md Update master to build with Xcode 9.3 beta 1 Jan 26, 2018

README.md

Swift logo

Swift Programming Language

Swift Package
macOS Build Status Build Status
Ubuntu 14.04 Build Status Build Status
Ubuntu 16.04 Build Status Build Status
Ubuntu 16.10 Build Status Build Status

Welcome to Swift!

Swift is a high-performance system programming language. It has a clean and modern syntax, offers seamless access to existing C and Objective-C code and frameworks, and is memory safe by default.

Although inspired by Objective-C and many other languages, Swift is not itself a C-derived language. As a complete and independent language, Swift packages core features like flow control, data structures, and functions, with high-level constructs like objects, protocols, closures, and generics. Swift embraces modules, eliminating the need for headers and the code duplication they entail.

To learn more about the programming language, visit swift.org.

Contributing to Swift

Contributions to Swift are welcomed and encouraged! Please see the Contributing to Swift guide.

To be a truly great community, Swift.org needs to welcome developers from all walks of life, with different backgrounds, and with a wide range of experience. A diverse and friendly community will have more great ideas, more unique perspectives, and produce more great code. We will work diligently to make the Swift community welcoming to everyone.

To give clarity of what is expected of our members, Swift has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and we think it articulates our values well. For more, see the Code of Conduct.

Getting Started

These instructions give the most direct path to a working Swift development environment. To build from source you will need 2 GB of disk space for the source code and over 20 GB of disk space for the build artifacts. A clean build can take multiple hours, but incremental builds will finish much faster.

System Requirements

macOS, Ubuntu Linux LTS, and the latest Ubuntu Linux release are the current supported host development operating systems.

macOS

To build for macOS, you need Xcode 9.3 beta. The required version of Xcode changes frequently, and is often a beta release. Check this document or the host information on https://ci.swift.org for the current required version.

You will also need CMake and Ninja, which can be installed via a package manager:

Homebrew

brew install cmake ninja

MacPorts

sudo port install cmake ninja

Instructions for installing CMake and Ninja directly can be found below.

Linux

For Ubuntu, you'll need the following development dependencies:

sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config libblocksruntime-dev libcurl4-openssl-dev autoconf libtool systemtap-sdt-dev tzdata

Note: LLDB currently requires at least swig-1.3.40 but will successfully build with version 2 shipped with Ubuntu.

Build instructions for Ubuntu 14.04 LTS can be found here.

Getting Sources for Swift and Related Projects

First create a directory for all of the Swift sources:

mkdir swift-source
cd swift-source

Note: This is important since update-checkout (see below) checks out repositories next to the Swift source directory. This means that if one clones Swift and has other unrelated repositories, update-checkout may not clone those repositories and will update them instead.

Via HTTPS For those checking out sources as read-only, HTTPS works best:

git clone https://github.com/apple/swift.git
./swift/utils/update-checkout --clone

Via SSH For those who plan on regularly making direct commits, cloning over SSH may provide a better experience (which requires uploading SSH keys to GitHub):

git clone git@github.com:apple/swift.git
./swift/utils/update-checkout --clone-with-ssh

Building Swift

The build-script is a high-level build automation script that supports basic options such as building a Swift-compatible LLDB, building the Swift Package Manager, building for various platforms, running tests after builds, and more.

There are two primary build systems to use: Xcode and Ninja. The Xcode build system allows you to work in Xcode, but Ninja is a bit faster and supports more environments.

To build using Ninja, run:

utils/build-script --release-debuginfo

When developing Swift, it helps to build what you're working on in a debug configuration while building the rest of the project with optimizations. Below are some examples of using debug variants:

utils/build-script --release-debuginfo --debug-swift # Swift frontend built in debug
utils/build-script --release-debuginfo --debug-swift-stdlib # Standard library built in debug
utils/build-script --release-debuginfo --debug-swift --force-optimized-typechecker # Swift frontend sans type checker built in debug

Limiting the amount of debug code in the compiler has a very large impact on Swift compile times, and in turn the test execution time. If you want to build the entire project in debug, you can run:

utils/build-script --debug

For documentation of all available arguments, as well as additional usage information, see the inline help:

utils/build-script -h

Xcode

To build using Xcode, specify the --xcode argument on any of the above commands. Xcode can be used to edit the Swift source code, but it is not currently fully supported as a build environment for SDKs other than macOS. The generated Xcode project does not integrate with the test runner, but the tests can be run with the 'check-swift' target.

Build Products

All of the build products are placed in swift-source/build/${TOOL}-${MODE}/${PRODUCT}-${PLATFORM}/. If macOS Swift with Ninja in DebugAssert mode was built, all of the products would be in swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64/. It helps to save this directory as an environment variable for future use.

export SWIFT_BUILD_DIR="~/swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64"

Ninja

Once the first build has completed, Ninja can perform fast incremental builds of various products. These incremental builds are a big timesaver when developing and debugging.

cd ${SWIFT_BUILD_DIR}
ninja swift

This will build the Swift compiler, but will not rebuild the standard library or any other target. Building the swift-stdlib target as an additional layer of testing from time to time is also a good idea. To build just the standard library, run:

ninja swift-stdlib

It is always a good idea to do a full build after using update-checkout.

Using Xcode

To open the Swift project in Xcode, open ${SWIFT_BUILD_DIR}/Swift.xcodeproj. It will auto-create a lot of schemes for all of the available targets. A common debug flow would involve:

  • Select the 'swift' scheme.
  • Pull up the scheme editor (⌘⇧<).
  • Select the 'Arguments' tab and click the '+'.
  • Add the command line options.
  • Close the scheme editor.
  • Build and run.

Another option is to change the scheme to "Wait for executable to be launched", then run the build product in Terminal.

Build Failures

Make sure you are using the correct release of Xcode.

If you have changed Xcode versions but still encounter errors that appear to be related to the Xcode version, try passing --rebuild to build-script.

When a new version of Xcode is released, you can update your build without recompiling the entire project by passing the --reconfigure option.

Make sure all repositories are up to date with the update-checkout command described above.

Testing Swift

See docs/Testing.md, in particular the section on lit.py.

Learning More

Be sure to look through the docs directory for more information about the compiler. In particular, the documents titled Debugging the Swift Compiler and Continuous Integration for Swift are very helpful to understand before submitting your first PR.

Building Documentation

To read the compiler documentation, start by installing the Sphinx documentation generator tool by running the command:

easy_install -U Sphinx

Once complete, you can build the Swift documentation by changing directory into docs and typing make. This compiles the .rst files in the docs directory into HTML in the docs/_build/html directory.

Many of the docs are out of date, but you can see some historical design documents in the docs directory.

Another source of documentation is the standard library itself, located in stdlib. Much of the language is actually implemented in the library (including Int), and the standard library gives some examples of what can be expressed today.

Build Dependencies

CMake

CMake is the core infrastructure used to configure builds of Swift and its companion projects; at least version 3.4.3 is required.

On macOS, you can download the CMake Binary Distribution, bundled as an application, copy it to /Applications, and add the embedded command line tools to your PATH:

export PATH=/Applications/CMake.app/Contents/bin:$PATH

On Linux, if you have not already installed Swift's development dependencies, you can download and install the CMake package separately using the following command:

sudo apt-get install cmake

Ninja

Ninja is the current recommended build system for building Swift and is the default configuration generated by CMake. Pre-built packages are available for macOS and Linux distributions. You can also clone Ninja next to the other projects and it will be bootstrapped automatically:

Via HTTPS

git clone https://github.com/ninja-build/ninja.git && cd ninja
git checkout release
cat README

Via SSH

git clone git@github.com:ninja-build/ninja.git && cd ninja
git checkout release
cat README
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - kamranahmedse/developer-roadmap: Roadmap to becoming a web developer in 2018
Skip to content
Roadmap to becoming a web developer in 2018
Switch branches/tags
Nothing to show
Latest commit aab6d38 Jan 6, 2018 5
kamranahmedse committed Jan 6, 2018 Update project files

README.md

Web Developer Roadmap

Roadmap to becoming a web developer in 2018

Below you find a set of charts demonstrating the paths that you can take and the technologies that you would want to adopt in order to become a frontend, backend or a devops. I made these charts for an old professor of mine who wanted something to share with his college students to give them a perspective.

If you think that these can be improved in anyway, please do suggest.


Did you like this guide and want more of the similar content?
Subscribe for the launch of Hugobots or follow me on twitter!


🚀 Introduction

🎨 Front-end Roadmap

👽 Back-end Roadmap

For the backend, personally I would prefer Node.js and PHP 7 for the full time. Plus, I have been experimenting lately with Go and I quite like it. Apart from these, if I have to choose another one, I would go for Ruby. However this is just my personal preference, you can choose any of the shown languages and you will be good.

👷 DevOps Roadmap


🚦 Wrap Up

If you think any of the roadmaps can be improved, please do open a PR with any updates and submit any issues. Also, I will continue to improve this, so you might want to watch/star this repository to revisit.

☑ TODO

  • Add Frontend Roadmap
  • Add Backend Roadmap
  • Add DevOps Roadmap
  • Add relevant resources for each

👬 Contribution

The roadmaps are built using Balsamiq. Project file can be found at /project-files directory. To modify any of the roadmaps, open Balsamiq, click Project > Import > Mockup JSON, it will open the roadmap for you, update it, upload and update the images in readme and create a PR.

  • Open pull request with improvements
  • Discuss ideas in issues
  • Spread the word
  • Reach out with any feedback Twitter URL

Sponsored By

License

License: CC BY 4.0

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - laravel/laravel: A PHP framework for web artisans
Skip to content
A PHP framework for web artisans
PHP HTML Vue

readme.md

Build Status Total Downloads Latest Stable Version License

About Laravel

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as:

Laravel is accessible, yet powerful, providing tools needed for large, robust applications.

Learning Laravel

Laravel has the most extensive and thorough documentation and video tutorial library of any modern web application framework, making it a breeze to get started learning the framework.

If you're not in the mood to read, Laracasts contains over 1100 video tutorials on a range of topics including Laravel, modern PHP, unit testing, JavaScript, and more. Boost the skill level of yourself and your entire team by digging into our comprehensive video library.

Laravel Sponsors

We would like to extend our thanks to the following sponsors for helping fund on-going Laravel development. If you are interested in becoming a sponsor, please visit the Laravel Patreon page:

Contributing

Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the Laravel documentation.

Security Vulnerabilities

If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via taylor@laravel.com. All security vulnerabilities will be promptly addressed.

License

The Laravel framework is open-sourced software licensed under the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - h5bp/html5-boilerplate: A professional front-end template for building fast, robust, and adaptable web apps or sites.
Skip to content
A professional front-end template for building fast, robust, and adaptable web apps or sites.
JavaScript CSS HTML
Latest commit 24d1a32 Feb 5, 2018

README.md

HTML5 Boilerplate

Build Status devDependency Status

HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.

This project is the product of years of iterative development and community knowledge. It does not impose a specific development philosophy or framework, so you're free to architect your code in the way that you want.

Quick start

Choose one of the following options:

  1. Download the latest stable release from html5boilerplate.com.
  2. Clone the git repo — git clone https://github.com/h5bp/html5-boilerplate.git - and checkout the tagged release you'd like to use.
  3. Run npm install html5-boilerplate and pull in what you need from the resulting node_modules/html5-boilerplate/dist

Features

  • HTML5 ready. Use the new elements with confidence.
  • Designed with progressive enhancement in mind.
  • Includes:
  • Placeholder CSS Media Queries.
  • Useful CSS helper classes.
  • Default print styles, performance optimized.
  • An optimized version of the Google Universal Analytics snippet.
  • Protection against any stray console statements causing JavaScript errors in older browsers.
  • "Delete-key friendly." Easy to strip out parts you don't need.
  • Extensive inline and accompanying documentation.

Browser support

  • Chrome (latest 2)
  • Edge (latest 2)
  • Firefox (latest 2)
  • Internet Explorer 9+
  • Opera (latest 2)
  • Safari (latest 2)

This doesn't mean that HTML5 Boilerplate cannot be used in older browsers, just that we'll ensure compatibility with the ones mentioned above.

If you need legacy browser support you can use HTML5 Boilerplate v4 (IE 6+, Firefox 3.6+, Safari 4+), or HTML5 Boilerplate v5 (IE8+). They are no longer actively developed.

Documentation

Take a look at the documentation table of contents. This documentation is bundled with the project which makes it available for offline reading and provides a useful starting point for any documentation you want to write about your project.

Contributing

Hundreds of developers have helped to make the HTML5 Boilerplate. Anyone is welcome to contribute, however, if you decide to get involved, please take a moment to review the guidelines:

License

The code is available under the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - Semantic-Org/Semantic-UI: Semantic is a UI component framework based around useful principles from natural language.
Skip to content
Semantic is a UI component framework based around useful principles from natural language.
JavaScript CSS HTML
Latest commit 5b681ca Feb 20, 2018

README.md

Semantic

Semantic UI

Join the chat at https://gitter.im/Semantic-Org/Semantic-UI

CDNJS

Semantic is a UI framework designed for theming.

Key Features

  • 50+ UI elements
  • 3000 + CSS variables
  • 3 Levels of variable inheritance (similar to SublimeText)
  • Built with EM values for responsive design
  • Flexbox friendly

Semantic allows developers to build beautiful websites fast, with concise HTML, intuitive javascript, and simplified debugging, helping make front-end development a delightful experience. Semantic is responsively designed allowing your website to scale on multiple devices. Semantic is production ready and partnered with frameworks such as React, Angular, Meteor, and Ember, which means you can integrate it with any of these frameworks to organize your UI layer alongside your application logic.

2.3.0 Release (Feb 20th, 2018)

Semantic UI 2.3 is now available. Read up on what's new in the docs.

Migration info from 1.x can be found in the 2.0 release notes

User Support

Please help us keep the issue tracker organized. For technical questions that do not include a specific JSFiddle test case (bug reports), or feature request please use StackOverflow to find a solution.

Visit our contributing guide for more on what should be posted to GitHub Issues.

Install

Recommended Install

npm install semantic-ui  # Use themes, import build/watch tasks into your own gulpfile.

Semantic UI includes an interactive installer to help setup your project.

Additional Versions

Environment Install Script Repo
CSS Only npm install semantic-ui-css CSS Repo
LESS Only npm install semantic-ui-less LESS Repo
LESS plugin npm install less-plugin-semantic-ui LESS Plugin Repo
EmberJS ember install:addon semantic-ui-ember Ember Repo
Meteor - LESS meteor add semantic:ui Meteor Repo
Meteor - CSS meteor add semantic:ui-css CSS Repo
Bower bower install semantic-ui

Check out our integration wiki for more options.

Browser Support

  • Last 2 Versions FF, Chrome, Safari Mac
  • IE 11+
  • Android 4.4+, Chrome for Android 44+
  • iOS Safari 7+
  • Microsoft Edge 12+

Although some components will work in IE9, grids and other flexbox components are not supported by IE9 and may not appear correctly.

Community

Getting Help

Please do not post usage questions to GitHub Issues. For these types of questions use our [Gitter chatroom] or StackOverflow.

Submitting Bugs and Enhancements

GitHub Issues is for suggesting enhancements and reporting bugs. Before submiting a bug make sure you do the following:

  • Check out our contributing guide for info on our release cycle.
  • Fork this boilerplate JSFiddle to create a test case for your bug. If a bug is apparent in the docs, that's ok as a test case, just make it clear exactly how to reproduce the issue. Only bugs that include a test case can be triaged.

Pull Requests

When adding pull requests, be sure to merge into the next branch. If you need to demonstrate a fix in next release, you can use this JSFiddle

International

  • Chinese A Chinese mirror site is available at http://www.semantic-ui.cn.
  • Right-to-Left (RTL) An RTL version can be created using our build tools by selecting rtl from the install script.
  • Translation To help translate see the Wiki Guide for translations.

Resources

Resource Description
Bugs & Feature Requests All bug submission require a link to a test case, and a set of steps to reproduce the issue. You can make a test case by forking this JSFiddle, then submit your bug report on GitHub Issues
Live Chat Join our Gitter.im Room
Newsletter Updates Sign up for updates at semantic-ui.com
Additional Resources Submit a question on StackOverflow or ask our Google Group

Places to Help

Project How To Help Next Step
Localization Help us translate Semantic UI into your language Join our Translation Community
SCSS SASS needs PR to support variables inside @import Add Pull Request for #739
Angular Help develop angular bindings Reach Out on GitHub Issues
Guides & Tutorials Help write guides and tutorials Join the discussion

Reaching Out

If you'd like to start a conversation about Semantic feel free to e-mail me at jack@semantic-ui.com

Flattr This

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - mrdoob/three.js: JavaScript 3D library.
Skip to content
JavaScript Python C++ GLSL C HTML Other
Latest commit 3ebd749 Feb 22, 2018

README.md

three.js

Latest NPM release License Dependencies Dev Dependencies

JavaScript 3D library

The aim of the project is to create an easy to use, lightweight, 3D library. The library provides <canvas>, <svg>, CSS3D and WebGL renderers.

ExamplesDocumentationWikiMigratingQuestionsForumGitterSlack

Usage

Download the minified library and include it in your HTML, or install and import it as a module, Alternatively see how to build the library yourself.

<script src="js/three.min.js"></script>

This code creates a scene, a camera, and a geometric cube, and it adds the cube to the scene. It then creates a WebGL renderer for the scene and camera, and it adds that viewport to the document.body element. Finally, it animates the cube within the scene for the camera.

var camera, scene, renderer;
var geometry, material, mesh;

init();
animate();

function init() {

	camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );
	camera.position.z = 1;

	scene = new THREE.Scene();

	geometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 );
	material = new THREE.MeshNormalMaterial();

	mesh = new THREE.Mesh( geometry, material );
	scene.add( mesh );

	renderer = new THREE.WebGLRenderer( { antialias: true } );
	renderer.setSize( window.innerWidth, window.innerHeight );
	document.body.appendChild( renderer.domElement );

}

function animate() {

	requestAnimationFrame( animate );

	mesh.rotation.x += 0.01;
	mesh.rotation.y += 0.02;

	renderer.render( scene, camera );

}

If everything went well you should see this.

Change log

releases

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - socketio/socket.io: Realtime application framework (Node.JS server)
Skip to content
Realtime application framework (Node.JS server)
JavaScript
Latest commit 1c108a3 Oct 22, 2017 1
darrachequesne committed Oct 22, 2017 [chore] Release 2.0.4

Readme.md

socket.io

Backers on Open Collective Sponsors on Open Collective Build Status Dependency Status devDependency Status NPM version Downloads

Features

Socket.IO enables real-time bidirectional event-based communication. It consists in:

Some implementations in other languages are also available:

Its main features are:

Reliability

Connections are established even in the presence of:

  • proxies and load balancers.
  • personal firewall and antivirus software.

For this purpose, it relies on Engine.IO, which first establishes a long-polling connection, then tries to upgrade to better transports that are "tested" on the side, like WebSocket. Please see the Goals section for more information.

Auto-reconnection support

Unless instructed otherwise a disconnected client will try to reconnect forever, until the server is available again. Please see the available reconnection options here.

Disconnection detection

An heartbeat mechanism is implemented at the Engine.IO level, allowing both the server and the client to know when the other one is not responding anymore.

That functionality is achieved with timers set on both the server and the client, with timeout values (the pingInterval and pingTimeout parameters) shared during the connection handshake. Those timers require any subsequent client calls to be directed to the same server, hence the sticky-session requirement when using multiples nodes.

Binary support

Any serializable data structures can be emitted, including:

Simple and convenient API

Sample code:

io.on('connection', function(socket){
  socket.emit('request', /* */); // emit an event to the socket
  io.emit('broadcast', /* */); // emit an event to all connected sockets
  socket.on('reply', function(){ /* */ }); // listen to the event
});

Cross-browser

Browser support is tested in Saucelabs:

Sauce Test Status

Multiplexing support

In order to create separation of concerns within your application (for example per module, or based on permissions), Socket.IO allows you to create several Namespaces, which will act as separate communication channels but will share the same underlying connection.

Room support

Within each Namespace, you can define arbitrary channels, called Rooms, that sockets can join and leave. You can then broadcast to any given room, reaching every socket that has joined it.

This is a useful feature to send notifications to a group of users, or to a given user connected on several devices for example.

Note: Socket.IO is not a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the ack id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server (like ws://echo.websocket.org) either. Please see the protocol specification here.

Installation

npm install socket.io --save

How to use

The following example attaches socket.io to a plain Node.JS HTTP server listening on port 3000.

var server = require('http').createServer();
var io = require('socket.io')(server);
io.on('connection', function(client){
  client.on('event', function(data){});
  client.on('disconnect', function(){});
});
server.listen(3000);

Standalone

var io = require('socket.io')();
io.on('connection', function(client){});
io.listen(3000);

In conjunction with Express

Starting with 3.0, express applications have become request handler functions that you pass to http or http Server instances. You need to pass the Server to socket.io, and not the express application function. Also make sure to call .listen on the server, not the app.

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(){ /**/ });
server.listen(3000);

In conjunction with Koa

Like Express.JS, Koa works by exposing an application as a request handler function, but only by calling the callback method.

var app = require('koa')();
var server = require('http').createServer(app.callback());
var io = require('socket.io')(server);
io.on('connection', function(){ /**/ });
server.listen(3000);

Documentation

Please see the documentation here. Contributions are welcome!

Debug / logging

Socket.IO is powered by debug. In order to see all the debug output, run your app with the environment variable DEBUG including the desired scope.

To see the output from all of Socket.IO's debugging scopes you can use:

DEBUG=socket.io* node myapp

Testing

npm test

This runs the gulp task test. By default the test will be run with the source code in lib directory.

Set the environmental variable TEST_VERSION to compat to test the transpiled es5-compat version of the code.

The gulp task test will always transpile the source code into es5 and export to dist first before running the test.

Backers

Support us with a monthly donation and help us continue our activities. [Become a backer]

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]

License

MIT

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - meteor/meteor: Meteor, the JavaScript App Platform
Skip to content
JavaScript Shell HTML CoffeeScript PowerShell CSS Other
Switch branches/tags
Permalink
Failed to load latest commit information.
.circleci Merge pull request #9627 from jamesmillerburgess/faster-circleci-work… Feb 7, 2018
.github Update ISSUE_TEMPLATE.md Nov 16, 2017
LICENSES Added MIT Copyright license for jQuery under JS Foundation Feb 15, 2017
examples Removed examples and added a command to printout their repos. Mar 3, 2016
packages Update meteor-babel and reify npm packages to latest versions. Feb 22, 2018
scripts Update meteor-babel and reify npm packages to latest versions. Feb 22, 2018
tools Keep bundled /public and /private node_modules symlink content. (#9666) Feb 21, 2018
.eslintignore Removes Velocity testing code Jun 16, 2016
.gitignore Add temporary `dev_bundle_XXX` directory to .gitignore Sep 12, 2017
.gitmodules Move packages-for-isopackets/blaze to packages/non-core/blaze. Sep 9, 2016
.mailmap Clarify what .mailmap is in comments Jul 31, 2015
.travis.yml Attempt to fix Travis CI tests. Oct 4, 2016
CODE_OF_CONDUCT.md Adjust policy doc filenames to use capital snake case Oct 11, 2017
CONTRIBUTING.md Fix typo in "Documentation" section (#9352) Nov 12, 2017
DEVELOPMENT.md Merge branch 'devel' into release-1.6 Oct 12, 2017
History.md Update meteor-babel and reify npm packages to latest versions. Feb 22, 2018
ISSUE_TRIAGE.md Adjust policy doc filenames to use capital snake case Oct 11, 2017
IssueTriageFlow.png More work on IssueTriage May 3, 2016
LICENSE Update license range for 2018 🎉 (#9523) Jan 10, 2018
README.md Correct link in markdown badge. Nov 22, 2017
Roadmap.md Adjust policy doc filenames to use capital snake case Oct 11, 2017
appveyor.yml Add a self-test skip option (#9579) Jan 29, 2018
meteor Bump $BUNDLE_VERSION to 8.9.24 before rebuilding dev bundle. Feb 13, 2018
meteor.bat Detect dev_bundle download errors and fail appropriately on Windows. Mar 30, 2017

README.md

Meteor

TravisCI Status CircleCI Status BrowserStack Status

Meteor is an ultra-simple environment for building modern web applications.

With Meteor you write apps:

  • in modern JavaScript
  • that send data over the wire, rather than HTML
  • using your choice of popular open-source libraries

Try a getting started tutorial:

Next, read the guide and the documentation.

Quick Start

On Windows, the installer can be found at https://www.meteor.com/install.

On Linux/macOS, use this line:

curl https://install.meteor.com/ | sh

Create a project:

meteor create try-meteor

Run it:

cd try-meteor
meteor

Developer Resources

Building an application with Meteor?

Interested in helping or contributing to Meteor? These resources will help:

We are hiring! Visit meteor.io/jobs to learn more about working full-time on the Meteor project.

Uninstalling Meteor

Aside from a short launcher shell script, Meteor installs itself inside your home directory. To uninstall Meteor, run:

rm -rf ~/.meteor/
sudo rm /usr/local/bin/meteor

On Windows, just run the uninstaller from your Control Panel.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - hakimel/reveal.js: The HTML Presentation Framework
Skip to content
JavaScript CSS HTML

README.md

reveal.js Build Status Slides

A framework for easily creating beautiful presentations using HTML. Check out the live demo.

reveal.js comes with a broad range of features including nested slides, Markdown contents, PDF export, speaker notes and a JavaScript API. There's also a fully featured visual editor and platform for sharing reveal.js presentations at slides.com.

Table of contents

More reading

  • Changelog: Up-to-date version history.
  • Examples: Presentations created with reveal.js, add your own!
  • Browser Support: Explanation of browser support and fallbacks.
  • Plugins: A list of plugins that can be used to extend reveal.js.

Online Editor

Presentations are written using HTML or Markdown but there's also an online editor for those of you who prefer a graphical interface. Give it a try at https://slides.com.

Instructions

Markup

Here's a barebones example of a fully working reveal.js presentation:

<html>
	<head>
		<link rel="stylesheet" href="css/reveal.css">
		<link rel="stylesheet" href="css/theme/white.css">
	</head>
	<body>
		<div class="reveal">
			<div class="slides">
				<section>Slide 1</section>
				<section>Slide 2</section>
			</div>
		</div>
		<script src="js/reveal.js"></script>
		<script>
			Reveal.initialize();
		</script>
	</body>
</html>

The presentation markup hierarchy needs to be .reveal > .slides > section where the section represents one slide and can be repeated indefinitely. If you place multiple section elements inside of another section they will be shown as vertical slides. The first of the vertical slides is the "root" of the others (at the top), and will be included in the horizontal sequence. For example:

<div class="reveal">
	<div class="slides">
		<section>Single Horizontal Slide</section>
		<section>
			<section>Vertical Slide 1</section>
			<section>Vertical Slide 2</section>
		</section>
	</div>
</div>

Markdown

It's possible to write your slides using Markdown. To enable Markdown, add the data-markdown attribute to your <section> elements and wrap the contents in a <textarea data-template> like the example below. You'll also need to add the plugin/markdown/marked.js and plugin/markdown/markdown.js scripts (in that order) to your HTML file.

This is based on data-markdown from Paul Irish modified to use marked to support GitHub Flavored Markdown. Sensitive to indentation (avoid mixing tabs and spaces) and line breaks (avoid consecutive breaks).

<section data-markdown>
	<textarea data-template>
		## Page title

		A paragraph with some text and a [link](http://hakim.se).
	</textarea>
</section>

External Markdown

You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file: the data-separator attribute defines a regular expression for horizontal slides (defaults to ^\r?\n---\r?\n$, a newline-bounded horizontal rule) and data-separator-vertical defines vertical slides (disabled by default). The data-separator-notes attribute is a regular expression for specifying the beginning of the current slide's speaker notes (defaults to note:). The data-charset attribute is optional and specifies which charset to use when loading the external file.

When used locally, this feature requires that reveal.js runs from a local web server. The following example customises all available options:

<section data-markdown="example.md"
         data-separator="^\n\n\n"
         data-separator-vertical="^\n\n"
         data-separator-notes="^Note:"
         data-charset="iso-8859-15">
    <!--
        Note that Windows uses `\r\n` instead of `\n` as its linefeed character.
        For a regex that supports all operating systems, use `\r?\n` instead of `\n`.
    -->
</section>

Element Attributes

Special syntax (in html comment) is available for adding attributes to Markdown elements. This is useful for fragments, amongst other things.

<section data-markdown>
	<script type="text/template">
		- Item 1 <!-- .element: class="fragment" data-fragment-index="2" -->
		- Item 2 <!-- .element: class="fragment" data-fragment-index="1" -->
	</script>
</section>

Slide Attributes

Special syntax (in html comment) is available for adding attributes to the slide <section> elements generated by your Markdown.

<section data-markdown>
	<script type="text/template">
	<!-- .slide: data-background="#ff0000" -->
		Markdown content
	</script>
</section>

Configuring marked

We use marked to parse Markdown. To customise marked's rendering, you can pass in options when configuring Reveal:

Reveal.initialize({
	// Options which are passed into marked
	// See https://github.com/chjj/marked#options-1
	markdown: {
		smartypants: true
	}
});

Configuration

At the end of your page you need to initialize reveal by running the following code. Note that all config values are optional and will default as specified below.

Reveal.initialize({

	// Display presentation control arrows
	controls: true,

	// Help the user learn the controls by providing hints, for example by
	// bouncing the down arrow when they first encounter a vertical slide
	controlsTutorial: true,

	// Determines where controls appear, "edges" or "bottom-right"
	controlsLayout: 'bottom-right',

	// Visibility rule for backwards navigation arrows; "faded", "hidden"
	// or "visible"
	controlsBackArrows: 'faded',

	// Display a presentation progress bar
	progress: true,

	// Set default timing of 2 minutes per slide
	defaultTiming: 120,

	// Display the page number of the current slide
	slideNumber: false,

	// Push each slide change to the browser history
	history: false,

	// Enable keyboard shortcuts for navigation
	keyboard: true,

	// Enable the slide overview mode
	overview: true,

	// Vertical centering of slides
	center: true,

	// Enables touch navigation on devices with touch input
	touch: true,

	// Loop the presentation
	loop: false,

	// Change the presentation direction to be RTL
	rtl: false,

	// Randomizes the order of slides each time the presentation loads
	shuffle: false,

	// Turns fragments on and off globally
	fragments: true,

	// Flags if the presentation is running in an embedded mode,
	// i.e. contained within a limited portion of the screen
	embedded: false,

	// Flags if we should show a help overlay when the questionmark
	// key is pressed
	help: true,

	// Flags if speaker notes should be visible to all viewers
	showNotes: false,

	// Global override for autoplaying embedded media (video/audio/iframe)
	// - null: Media will only autoplay if data-autoplay is present
	// - true: All media will autoplay, regardless of individual setting
	// - false: No media will autoplay, regardless of individual setting
	autoPlayMedia: null,

	// Number of milliseconds between automatically proceeding to the
	// next slide, disabled when set to 0, this value can be overwritten
	// by using a data-autoslide attribute on your slides
	autoSlide: 0,

	// Stop auto-sliding after user input
	autoSlideStoppable: true,

	// Use this method for navigation when auto-sliding
	autoSlideMethod: Reveal.navigateNext,

	// Enable slide navigation via mouse wheel
	mouseWheel: false,

	// Hides the address bar on mobile devices
	hideAddressBar: true,

	// Opens links in an iframe preview overlay
	// Add `data-preview-link` and `data-preview-link="false"` to customise each link
	// individually
	previewLinks: false,

	// Transition style
	transition: 'slide', // none/fade/slide/convex/concave/zoom

	// Transition speed
	transitionSpeed: 'default', // default/fast/slow

	// Transition style for full page slide backgrounds
	backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom

	// Number of slides away from the current that are visible
	viewDistance: 3,

	// Parallax background image
	parallaxBackgroundImage: '', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'"

	// Parallax background size
	parallaxBackgroundSize: '', // CSS syntax, e.g. "2100px 900px"

	// Number of pixels to move the parallax background per slide
	// - Calculated automatically unless specified
	// - Set to 0 to disable movement along an axis
	parallaxBackgroundHorizontal: null,
	parallaxBackgroundVertical: null,

	// The display mode that will be used to show slides
	display: 'block'

});

The configuration can be updated after initialization using the configure method:

// Turn autoSlide off
Reveal.configure({ autoSlide: 0 });

// Start auto-sliding every 5s
Reveal.configure({ autoSlide: 5000 });

Presentation Size

All presentations have a normal size, that is the resolution at which they are authored. The framework will automatically scale presentations uniformly based on this size to ensure that everything fits on any given display or viewport.

See below for a list of configuration options related to sizing, including default values:

Reveal.initialize({

	...

	// The "normal" size of the presentation, aspect ratio will be preserved
	// when the presentation is scaled to fit different resolutions. Can be
	// specified using percentage units.
	width: 960,
	height: 700,

	// Factor of the display size that should remain empty around the content
	margin: 0.1,

	// Bounds for smallest/largest possible scale to apply to content
	minScale: 0.2,
	maxScale: 1.5

});

If you wish to disable this behavior and do your own scaling (e.g. using media queries), try these settings:

Reveal.initialize({

	...

	width: "100%",
	height: "100%",
	margin: 0,
	minScale: 1,
	maxScale: 1
});

Dependencies

Reveal.js doesn't rely on any third party scripts to work but a few optional libraries are included by default. These libraries are loaded as dependencies in the order they appear, for example:

Reveal.initialize({
	dependencies: [
		// Cross-browser shim that fully implements classList - https://github.com/eligrey/classList.js/
		{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },

		// Interpret Markdown in <section> elements
		{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
		{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },

		// Syntax highlight for <code> elements
		{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },

		// Zoom in and out with Alt+click
		{ src: 'plugin/zoom-js/zoom.js', async: true },

		// Speaker notes
		{ src: 'plugin/notes/notes.js', async: true },

		// MathJax
		{ src: 'plugin/math/math.js', async: true }
	]
});

You can add your own extensions using the same syntax. The following properties are available for each dependency object:

  • src: Path to the script to load
  • async: [optional] Flags if the script should load after reveal.js has started, defaults to false
  • callback: [optional] Function to execute when the script has loaded
  • condition: [optional] Function which must return true for the script to be loaded

To load these dependencies, reveal.js requires head.js (a script loading library) to be loaded before reveal.js.

Ready Event

A 'ready' event is fired when reveal.js has loaded all non-async dependencies and is ready to start navigating. To check if reveal.js is already 'ready' you can call Reveal.isReady().

Reveal.addEventListener( 'ready', function( event ) {
	// event.currentSlide, event.indexh, event.indexv
} );

Note that we also add a .ready class to the .reveal element so that you can hook into this with CSS.

Auto-sliding

Presentations can be configured to progress through slides automatically, without any user input. To enable this you will need to tell the framework how many milliseconds it should wait between slides:

// Slide every five seconds
Reveal.configure({
  autoSlide: 5000
});

When this is turned on a control element will appear that enables users to pause and resume auto-sliding. Alternatively, sliding can be paused or resumed by pressing »a« on the keyboard. Sliding is paused automatically as soon as the user starts navigating. You can disable these controls by specifying autoSlideStoppable: false in your reveal.js config.

You can also override the slide duration for individual slides and fragments by using the data-autoslide attribute:

<section data-autoslide="2000">
	<p>After 2 seconds the first fragment will be shown.</p>
	<p class="fragment" data-autoslide="10000">After 10 seconds the next fragment will be shown.</p>
	<p class="fragment">Now, the fragment is displayed for 2 seconds before the next slide is shown.</p>
</section>

To override the method used for navigation when auto-sliding, you can specify the autoSlideMethod setting. To only navigate along the top layer and ignore vertical slides, set this to Reveal.navigateRight.

Whenever the auto-slide mode is resumed or paused the autoslideresumed and autoslidepaused events are fired.

Keyboard Bindings

If you're unhappy with any of the default keyboard bindings you can override them using the keyboard config option:

Reveal.configure({
  keyboard: {
    13: 'next', // go to the next slide when the ENTER key is pressed
    27: function() {}, // do something custom when ESC is pressed
    32: null // don't do anything when SPACE is pressed (i.e. disable a reveal.js default binding)
  }
});

Touch Navigation

You can swipe to navigate through a presentation on any touch-enabled device. Horizontal swipes change between horizontal slides, vertical swipes change between vertical slides. If you wish to disable this you can set the touch config option to false when initializing reveal.js.

If there's some part of your content that needs to remain accessible to touch events you'll need to highlight this by adding a data-prevent-swipe attribute to the element. One common example where this is useful is elements that need to be scrolled.

Lazy Loading

When working on presentation with a lot of media or iframe content it's important to load lazily. Lazy loading means that reveal.js will only load content for the few slides nearest to the current slide. The number of slides that are preloaded is determined by the viewDistance configuration option.

To enable lazy loading all you need to do is change your "src" attributes to "data-src" as shown below. This is supported for image, video, audio and iframe elements. Lazy loaded iframes will also unload when the containing slide is no longer visible.

<section>
  <img data-src="image.png">
  <iframe data-src="http://hakim.se"></iframe>
  <video>
    <source data-src="video.webm" type="video/webm" />
    <source data-src="video.mp4" type="video/mp4" />
  </video>
</section>

API

The Reveal object exposes a JavaScript API for controlling navigation and reading state:

// Navigation
Reveal.slide( indexh, indexv, indexf );
Reveal.left();
Reveal.right();
Reveal.up();
Reveal.down();
Reveal.prev();
Reveal.next();
Reveal.prevFragment();
Reveal.nextFragment();

// Randomize the order of slides
Reveal.shuffle();

// Toggle presentation states, optionally pass true/false to force on/off
Reveal.toggleOverview();
Reveal.togglePause();
Reveal.toggleAutoSlide();

// Shows a help overlay with keyboard shortcuts, optionally pass true/false
// to force on/off
Reveal.toggleHelp();

// Change a config value at runtime
Reveal.configure({ controls: true });

// Returns the present configuration options
Reveal.getConfig();

// Fetch the current scale of the presentation
Reveal.getScale();

// Retrieves the previous and current slide elements
Reveal.getPreviousSlide();
Reveal.getCurrentSlide();

Reveal.getIndices();        // { h: 0, v: 0 } }
Reveal.getPastSlideCount();
Reveal.getProgress();       // (0 == first slide, 1 == last slide)
Reveal.getSlides();         // Array of all slides
Reveal.getTotalSlides();    // total number of slides

// Returns the speaker notes for the current slide
Reveal.getSlideNotes();

// State checks
Reveal.isFirstSlide();
Reveal.isLastSlide();
Reveal.isOverview();
Reveal.isPaused();
Reveal.isAutoSliding();

Slide Changed Event

A 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index values of the current slide as well as a reference to the previous and current slide HTML nodes.

Some libraries, like MathJax (see #226), get confused by the transforms and display states of slides. Often times, this can be fixed by calling their update or render function from this callback.

Reveal.addEventListener( 'slidechanged', function( event ) {
	// event.previousSlide, event.currentSlide, event.indexh, event.indexv
} );

Presentation State

The presentation's current state can be fetched by using the getState method. A state object contains all of the information required to put the presentation back as it was when getState was first called. Sort of like a snapshot. It's a simple object that can easily be stringified and persisted or sent over the wire.

Reveal.slide( 1 );
// we're on slide 1

var state = Reveal.getState();

Reveal.slide( 3 );
// we're on slide 3

Reveal.setState( state );
// we're back on slide 1

Slide States

If you set data-state="somestate" on a slide <section>, "somestate" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide.

Furthermore you can also listen to these changes in state via JavaScript:

Reveal.addEventListener( 'somestate', function() {
	// TODO: Sprinkle magic
}, false );

Slide Backgrounds

Slides are contained within a limited portion of the screen by default to allow them to fit any display and scale uniformly. You can apply full page backgrounds outside of the slide area by adding a data-background attribute to your <section> elements. Four different types of backgrounds are supported: color, image, video and iframe.

Color Backgrounds

All CSS color formats are supported, like rgba() or hsl().

<section data-background-color="#ff0000">
	<h2>Color</h2>
</section>

Image Backgrounds

By default, background images are resized to cover the full page. Available options:

Attribute Default Description
data-background-image URL of the image to show. GIFs restart when the slide opens.
data-background-size cover See background-size on MDN.
data-background-position center See background-position on MDN.
data-background-repeat no-repeat See background-repeat on MDN.
<section data-background-image="http://example.com/image.png">
	<h2>Image</h2>
</section>
<section data-background-image="http://example.com/image.png" data-background-size="100px" data-background-repeat="repeat">
	<h2>This background image will be sized to 100px and repeated</h2>
</section>

Video Backgrounds

Automatically plays a full size video behind the slide.

Attribute Default Description
data-background-video A single video source, or a comma separated list of video sources.
data-background-video-loop false Flags if the video should play repeatedly.
data-background-video-muted false Flags if the audio should be muted.
data-background-size cover Use cover for full screen and some cropping or contain for letterboxing.
<section data-background-video="https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.mp4,https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.webm" data-background-video-loop data-background-video-muted>
	<h2>Video</h2>
</section>

Iframe Backgrounds

Embeds a web page as a slide background that covers 100% of the reveal.js width and height. The iframe is in the background layer, behind your slides, and as such it's not possible to interact with it by default. To make your background interactive, you can add the data-background-interactive attribute.

<section data-background-iframe="https://slides.com" data-background-interactive>
	<h2>Iframe</h2>
</section>

Background Transitions

Backgrounds transition using a fade animation by default. This can be changed to a linear sliding transition by passing backgroundTransition: 'slide' to the Reveal.initialize() call. Alternatively you can set data-background-transition on any section with a background to override that specific transition.

Parallax Background

If you want to use a parallax scrolling background, set the first two config properties below when initializing reveal.js (the other two are optional).

Reveal.initialize({

	// Parallax background image
	parallaxBackgroundImage: '', // e.g. "https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg"

	// Parallax background size
	parallaxBackgroundSize: '', // CSS syntax, e.g. "2100px 900px" - currently only pixels are supported (don't use % or auto)

	// Number of pixels to move the parallax background per slide
	// - Calculated automatically unless specified
	// - Set to 0 to disable movement along an axis
	parallaxBackgroundHorizontal: 200,
	parallaxBackgroundVertical: 50

});

Make sure that the background size is much bigger than screen size to allow for some scrolling. View example.

Slide Transitions

The global presentation transition is set using the transition config value. You can override the global transition for a specific slide by using the data-transition attribute:

<section data-transition="zoom">
	<h2>This slide will override the presentation transition and zoom!</h2>
</section>

<section data-transition-speed="fast">
	<h2>Choose from three transition speeds: default, fast or slow!</h2>
</section>

You can also use different in and out transitions for the same slide:

<section data-transition="slide">
    The train goes on …
</section>
<section data-transition="slide">
    and on …
</section>
<section data-transition="slide-in fade-out">
    and stops.
</section>
<section data-transition="fade-in slide-out">
    (Passengers entering and leaving)
</section>
<section data-transition="slide">
    And it starts again.
</section>

Internal links

It's easy to link between slides. The first example below targets the index of another slide whereas the second targets a slide with an ID attribute (<section id="some-slide">):

<a href="#/2/2">Link</a>
<a href="#/some-slide">Link</a>

You can also add relative navigation links, similar to the built in reveal.js controls, by appending one of the following classes on any element. Note that each element is automatically given an enabled class when it's a valid navigation route based on the current slide.

<a href="#" class="navigate-left">
<a href="#" class="navigate-right">
<a href="#" class="navigate-up">
<a href="#" class="navigate-down">
<a href="#" class="navigate-prev"> <!-- Previous vertical or horizontal slide -->
<a href="#" class="navigate-next"> <!-- Next vertical or horizontal slide -->

Fragments

Fragments are used to highlight individual elements on a slide. Every element with the class fragment will be stepped through before moving on to the next slide. Here's an example: http://revealjs.com/#/fragments

The default fragment style is to start out invisible and fade in. This style can be changed by appending a different class to the fragment:

<section>
	<p class="fragment grow">grow</p>
	<p class="fragment shrink">shrink</p>
	<p class="fragment fade-out">fade-out</p>
	<p class="fragment fade-up">fade-up (also down, left and right!)</p>
	<p class="fragment current-visible">visible only once</p>
	<p class="fragment highlight-current-blue">blue only once</p>
	<p class="fragment highlight-red">highlight-red</p>
	<p class="fragment highlight-green">highlight-green</p>
	<p class="fragment highlight-blue">highlight-blue</p>
</section>

Multiple fragments can be applied to the same element sequentially by wrapping it, this will fade in the text on the first step and fade it back out on the second.

<section>
	<span class="fragment fade-in">
		<span class="fragment fade-out">I'll fade in, then out</span>
	</span>
</section>

The display order of fragments can be controlled using the data-fragment-index attribute.

<section>
	<p class="fragment" data-fragment-index="3">Appears last</p>
	<p class="fragment" data-fragment-index="1">Appears first</p>
	<p class="fragment" data-fragment-index="2">Appears second</p>
</section>

Fragment events

When a slide fragment is either shown or hidden reveal.js will dispatch an event.

Some libraries, like MathJax (see #505), get confused by the initially hidden fragment elements. Often times this can be fixed by calling their update or render function from this callback.

Reveal.addEventListener( 'fragmentshown', function( event ) {
	// event.fragment = the fragment DOM element
} );
Reveal.addEventListener( 'fragmenthidden', function( event ) {
	// event.fragment = the fragment DOM element
} );

Code syntax highlighting

By default, Reveal is configured with highlight.js for code syntax highlighting. To enable syntax highlighting, you'll have to load the highlight plugin (plugin/highlight/highlight.js) and a highlight.js CSS theme (Reveal comes packaged with the zenburn theme: lib/css/zenburn.css).

Below is an example with clojure code that will be syntax highlighted. When the data-trim attribute is present, surrounding whitespace is automatically removed. HTML will be escaped by default. To avoid this, for example if you are using <mark> to call out a line of code, add the data-noescape attribute to the <code> element.

<section>
	<pre><code data-trim data-noescape>
(def lazy-fib
  (concat
   [0 1]
   <mark>((fn rfib [a b]</mark>
        (lazy-cons (+ a b) (rfib b (+ a b)))) 0 1)))
	</code></pre>
</section>

Slide number

If you would like to display the page number of the current slide you can do so using the slideNumber and showSlideNumber configuration values.

// Shows the slide number using default formatting
Reveal.configure({ slideNumber: true });

// Slide number formatting can be configured using these variables:
//  "h.v": 	horizontal . vertical slide number (default)
//  "h/v": 	horizontal / vertical slide number
//    "c": 	flattened slide number
//  "c/t": 	flattened slide number / total slides
Reveal.configure({ slideNumber: 'c/t' });

// Control which views the slide number displays on using the "showSlideNumber" value:
//     "all": show on all views (default)
// "speaker": only show slide numbers on speaker notes view
//   "print": only show slide numbers when printing to PDF
Reveal.configure({ showSlideNumber: 'speaker' });

Overview mode

Press "Esc" or "o" keys to toggle the overview mode on and off. While you're in this mode, you can still navigate between slides, as if you were at 1,000 feet above your presentation. The overview mode comes with a few API hooks:

Reveal.addEventListener( 'overviewshown', function( event ) { /* ... */ } );
Reveal.addEventListener( 'overviewhidden', function( event ) { /* ... */ } );

// Toggle the overview mode programmatically
Reveal.toggleOverview();

Fullscreen mode

Just press »F« on your keyboard to show your presentation in fullscreen mode. Press the »ESC« key to exit fullscreen mode.

Embedded media

Add data-autoplay to your media element if you want it to automatically start playing when the slide is shown:

<video data-autoplay src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video>

If you want to enable or disable autoplay globally, for all embedded media, you can use the autoPlayMedia configuration option. If you set this to true ALL media will autoplay regardless of individual data-autoplay attributes. If you initialize with autoPlayMedia: false NO media will autoplay.

Note that embedded HTML5 <video>/<audio> and YouTube/Vimeo iframes are automatically paused when you navigate away from a slide. This can be disabled by decorating your element with a data-ignore attribute.

Embedded iframes

reveal.js automatically pushes two post messages to embedded iframes. slide:start when the slide containing the iframe is made visible and slide:stop when it is hidden.

Stretching elements

Sometimes it's desirable to have an element, like an image or video, stretch to consume as much space as possible within a given slide. This can be done by adding the .stretch class to an element as seen below:

<section>
	<h2>This video will use up the remaining space on the slide</h2>
    <video class="stretch" src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video>
</section>

Limitations:

  • Only direct descendants of a slide section can be stretched
  • Only one descendant per slide section can be stretched

postMessage API

The framework has a built-in postMessage API that can be used when communicating with a presentation inside of another window. Here's an example showing how you'd make a reveal.js instance in the given window proceed to slide 2:

<window>.postMessage( JSON.stringify({ method: 'slide', args: [ 2 ] }), '*' );

When reveal.js runs inside of an iframe it can optionally bubble all of its events to the parent. Bubbled events are stringified JSON with three fields: namespace, eventName and state. Here's how you subscribe to them from the parent window:

window.addEventListener( 'message', function( event ) {
	var data = JSON.parse( event.data );
	if( data.namespace === 'reveal' && data.eventName ==='slidechanged' ) {
		// Slide changed, see data.state for slide number
	}
} );

This cross-window messaging can be toggled on or off using configuration flags.

Reveal.initialize({
	...,

	// Exposes the reveal.js API through window.postMessage
	postMessage: true,

	// Dispatches all reveal.js events to the parent window through postMessage
	postMessageEvents: false
});

PDF Export

Presentations can be exported to PDF via a special print stylesheet. This feature requires that you use Google Chrome or Chromium and to be serving the presentation from a webserver. Here's an example of an exported presentation that's been uploaded to SlideShare: http://www.slideshare.net/hakimel/revealjs-300.

Page size

Export dimensions are inferred from the configured presentation size. Slides that are too tall to fit within a single page will expand onto multiple pages. You can limit how many pages a slide may expand onto using the pdfMaxPagesPerSlide config option, for example Reveal.configure({ pdfMaxPagesPerSlide: 1 }) ensures that no slide ever grows to more than one printed page.

Print stylesheet

To enable the PDF print capability in your presentation, the special print stylesheet at /css/print/pdf.css must be loaded. The default index.html file handles this for you when print-pdf is included in the query string. If you're using a different HTML template, you can add this to your HEAD:

<script>
	var link = document.createElement( 'link' );
	link.rel = 'stylesheet';
	link.type = 'text/css';
	link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
	document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>

Instructions

  1. Open your presentation with print-pdf included in the query string i.e. http://localhost:8000/?print-pdf. You can test this with revealjs.com?print-pdf.
  1. Open the in-browser print dialog (CTRL/CMD+P).
  2. Change the Destination setting to Save as PDF.
  3. Change the Layout to Landscape.
  4. Change the Margins to None.
  5. Enable the Background graphics option.
  6. Click Save.

Chrome Print Settings

Alternatively you can use the decktape project.

Theming

The framework comes with a few different themes included:

  • black: Black background, white text, blue links (default theme)
  • white: White background, black text, blue links
  • league: Gray background, white text, blue links (default theme for reveal.js < 3.0.0)
  • beige: Beige background, dark text, brown links
  • sky: Blue background, thin dark text, blue links
  • night: Black background, thick white text, orange links
  • serif: Cappuccino background, gray text, brown links
  • simple: White background, black text, blue links
  • solarized: Cream-colored background, dark green text, blue links

Each theme is available as a separate stylesheet. To change theme you will need to replace black below with your desired theme name in index.html:

<link rel="stylesheet" href="css/theme/black.css" id="theme">

If you want to add a theme of your own see the instructions here: /css/theme/README.md.

Speaker Notes

reveal.js comes with a speaker notes plugin which can be used to present per-slide notes in a separate browser window. The notes window also gives you a preview of the next upcoming slide so it may be helpful even if you haven't written any notes. Press the 's' key on your keyboard to open the notes window.

A speaker timer starts as soon as the speaker view is opened. You can reset it to 00:00:00 at any time by simply clicking/tapping on it.

Notes are defined by appending an <aside> element to a slide as seen below. You can add the data-markdown attribute to the aside element if you prefer writing notes using Markdown.

Alternatively you can add your notes in a data-notes attribute on the slide. Like <section data-notes="Something important"></section>.

When used locally, this feature requires that reveal.js runs from a local web server.

<section>
	<h2>Some Slide</h2>

	<aside class="notes">
		Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).
	</aside>
</section>

If you're using the external Markdown plugin, you can add notes with the help of a special delimiter:

<section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n" data-separator-notes="^Note:"></section>

# Title
## Sub-title

Here is some content...

Note:
This will only display in the notes window.

Share and Print Speaker Notes

Notes are only visible to the speaker inside of the speaker view. If you wish to share your notes with others you can initialize reveal.js with the showNotes config value set to true. Notes will appear along the bottom of the presentations.

When showNotes is enabled notes are also included when you export to PDF. By default, notes are printed in a semi-transparent box on top of the slide. If you'd rather print them on a separate page after the slide, set showNotes: "separate-page".

Speaker notes clock and timers

The speaker notes window will also show:

  • Time elapsed since the beginning of the presentation. If you hover the mouse above this section, a timer reset button will appear.
  • Current wall-clock time
  • (Optionally) a pacing timer which indicates whether the current pace of the presentation is on track for the right timing (shown in green), and if not, whether the presenter should speed up (shown in red) or has the luxury of slowing down (blue).

The pacing timer can be enabled by configuring by the defaultTiming parameter in the Reveal configuration block, which specifies the number of seconds per slide. 120 can be a reasonable rule of thumb. Timings can also be given per slide <section> by setting the data-timing attribute. Both values are in numbers of seconds.

Server Side Speaker Notes

In some cases it can be desirable to run notes on a separate device from the one you're presenting on. The Node.js-based notes plugin lets you do this using the same note definitions as its client side counterpart. Include the required scripts by adding the following dependencies:

Reveal.initialize({
	...

	dependencies: [
		{ src: 'socket.io/socket.io.js', async: true },
		{ src: 'plugin/notes-server/client.js', async: true }
	]
});

Then:

  1. Install Node.js (4.0.0 or later)
  2. Run npm install
  3. Run node plugin/notes-server

Multiplexing

The multiplex plugin allows your audience to view the slides of the presentation you are controlling on their own phone, tablet or laptop. As the master presentation navigates the slides, all client presentations will update in real time. See a demo at https://reveal-js-multiplex-ccjbegmaii.now.sh/.

The multiplex plugin needs the following 3 things to operate:

  1. Master presentation that has control
  2. Client presentations that follow the master
  3. Socket.io server to broadcast events from the master to the clients

More details:

Master presentation

Served from a static file server accessible (preferably) only to the presenter. This need only be on your (the presenter's) computer. (It's safer to run the master presentation from your own computer, so if the venue's Internet goes down it doesn't stop the show.) An example would be to execute the following commands in the directory of your master presentation:

  1. npm install node-static
  2. static

If you want to use the speaker notes plugin with your master presentation then make sure you have the speaker notes plugin configured correctly along with the configuration shown below, then execute node plugin/notes-server in the directory of your master presentation. The configuration below will cause it to connect to the socket.io server as a master, as well as launch your speaker-notes/static-file server.

You can then access your master presentation at http://localhost:1947

Example configuration:

Reveal.initialize({
	// other options...

	multiplex: {
		// Example values. To generate your own, see the socket.io server instructions.
		secret: '13652805320794272084', // Obtained from the socket.io server. Gives this (the master) control of the presentation
		id: '1ea875674b17ca76', // Obtained from socket.io server
		url: 'https://reveal-js-multiplex-ccjbegmaii.now.sh' // Location of socket.io server
	},

	// Don't forget to add the dependencies
	dependencies: [
		{ src: '//cdn.socket.io/socket.io-1.3.5.js', async: true },
		{ src: 'plugin/multiplex/master.js', async: true },

		// and if you want speaker notes
		{ src: 'plugin/notes-server/client.js', async: true }

		// other dependencies...
	]
});

Client presentation

Served from a publicly accessible static file server. Examples include: GitHub Pages, Amazon S3, Dreamhost, Akamai, etc. The more reliable, the better. Your audience can then access the client presentation via http://example.com/path/to/presentation/client/index.html, with the configuration below causing them to connect to the socket.io server as clients.

Example configuration:

Reveal.initialize({
	// other options...

	multiplex: {
		// Example values. To generate your own, see the socket.io server instructions.
		secret: null, // null so the clients do not have control of the master presentation
		id: '1ea875674b17ca76', // id, obtained from socket.io server
		url: 'https://reveal-js-multiplex-ccjbegmaii.now.sh' // Location of socket.io server
	},

	// Don't forget to add the dependencies
	dependencies: [
		{ src: '//cdn.socket.io/socket.io-1.3.5.js', async: true },
		{ src: 'plugin/multiplex/client.js', async: true }

		// other dependencies...
	]
});

Socket.io server

Server that receives the slideChanged events from the master presentation and broadcasts them out to the connected client presentations. This needs to be publicly accessible. You can run your own socket.io server with the commands:

  1. npm install
  2. node plugin/multiplex

Or you can use the socket.io server at https://reveal-js-multiplex-ccjbegmaii.now.sh/.

You'll need to generate a unique secret and token pair for your master and client presentations. To do so, visit http://example.com/token, where http://example.com is the location of your socket.io server. Or if you're going to use the socket.io server at https://reveal-js-multiplex-ccjbegmaii.now.sh/, visit https://reveal-js-multiplex-ccjbegmaii.now.sh/token.

You are very welcome to point your presentations at the Socket.io server running at https://reveal-js-multiplex-ccjbegmaii.now.sh/, but availability and stability are not guaranteed.

For anything mission critical I recommend you run your own server. The easiest way to do this is by installing now. With that installed, deploying your own Multiplex server is as easy running the following command from the reveal.js folder: now plugin/multiplex.

socket.io server as file static server

The socket.io server can play the role of static file server for your client presentation, as in the example at https://reveal-js-multiplex-ccjbegmaii.now.sh/. (Open https://reveal-js-multiplex-ccjbegmaii.now.sh/ in two browsers. Navigate through the slides on one, and the other will update to match.)

Example configuration:

Reveal.initialize({
	// other options...

	multiplex: {
		// Example values. To generate your own, see the socket.io server instructions.
		secret: null, // null so the clients do not have control of the master presentation
		id: '1ea875674b17ca76', // id, obtained from socket.io server
		url: 'example.com:80' // Location of your socket.io server
	},

	// Don't forget to add the dependencies
	dependencies: [
		{ src: '//cdn.socket.io/socket.io-1.3.5.js', async: true },
		{ src: 'plugin/multiplex/client.js', async: true }

		// other dependencies...
	]

It can also play the role of static file server for your master presentation and client presentations at the same time (as long as you don't want to use speaker notes). (Open https://reveal-js-multiplex-ccjbegmaii.now.sh/ in two browsers. Navigate through the slides on one, and the other will update to match. Navigate through the slides on the second, and the first will update to match.) This is probably not desirable, because you don't want your audience to mess with your slides while you're presenting. ;)

Example configuration:

Reveal.initialize({
	// other options...

	multiplex: {
		// Example values. To generate your own, see the socket.io server instructions.
		secret: '13652805320794272084', // Obtained from the socket.io server. Gives this (the master) control of the presentation
		id: '1ea875674b17ca76', // Obtained from socket.io server
		url: 'example.com:80' // Location of your socket.io server
	},

	// Don't forget to add the dependencies
	dependencies: [
		{ src: '//cdn.socket.io/socket.io-1.3.5.js', async: true },
		{ src: 'plugin/multiplex/master.js', async: true },
		{ src: 'plugin/multiplex/client.js', async: true }

		// other dependencies...
	]
});

MathJax

If you want to display math equations in your presentation you can easily do so by including this plugin. The plugin is a very thin wrapper around the MathJax library. To use it you'll need to include it as a reveal.js dependency, find our more about dependencies here.

The plugin defaults to using LaTeX but that can be adjusted through the math configuration object. Note that MathJax is loaded from a remote server. If you want to use it offline you'll need to download a copy of the library and adjust the mathjax configuration value.

Below is an example of how the plugin can be configured. If you don't intend to change these values you do not need to include the math config object at all.

Reveal.initialize({

	// other options ...

	math: {
		mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js',
		config: 'TeX-AMS_HTML-full'  // See http://docs.mathjax.org/en/latest/config-files.html
	},

	dependencies: [
		{ src: 'plugin/math/math.js', async: true }
	]

});

Read MathJax's documentation if you need HTTPS delivery or serving of specific versions for stability.

Installation

The basic setup is for authoring presentations only. The full setup gives you access to all reveal.js features and plugins such as speaker notes as well as the development tasks needed to make changes to the source.

Basic setup

The core of reveal.js is very easy to install. You'll simply need to download a copy of this repository and open the index.html file directly in your browser.

  1. Download the latest version of reveal.js from https://github.com/hakimel/reveal.js/releases

  2. Unzip and replace the example contents in index.html with your own

  3. Open index.html in a browser to view it

Full setup

Some reveal.js features, like external Markdown and speaker notes, require that presentations run from a local web server. The following instructions will set up such a server as well as all of the development tasks needed to make edits to the reveal.js source code.

  1. Install Node.js (4.0.0 or later)

  2. Clone the reveal.js repository

    $ git clone https://github.com/hakimel/reveal.js.git
  3. Navigate to the reveal.js folder

    $ cd reveal.js
  4. Install dependencies

    $ npm install
  5. Serve the presentation and monitor source files for changes

    $ npm start
  6. Open http://localhost:8000 to view your presentation

    You can change the port by using npm start -- --port=8001.

Folder Structure

  • css/ Core styles without which the project does not function
  • js/ Like above but for JavaScript
  • plugin/ Components that have been developed as extensions to reveal.js
  • lib/ All other third party assets (JavaScript, CSS, fonts)

License

MIT licensed

Copyright (C) 2017 Hakim El Hattab, http://hakim.se

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - rails/rails: Ruby on Rails
Skip to content
Ruby HTML JavaScript CoffeeScript CSS Shell
Switch branches/tags
Latest commit f85c77b Feb 22, 2018
Permalink
Failed to load latest commit information.
.github Limit stale checks to issues Apr 1, 2017
actioncable Rails 6 requires Ruby 2.4.1+ Feb 17, 2018
actionmailer Rails 6 requires Ruby 2.4.1+ Feb 17, 2018
actionpack Merge pull request #32018 from rails/add-nonce-support-to-csp Feb 22, 2018
actionview Merge pull request #32018 from rails/add-nonce-support-to-csp Feb 22, 2018
activejob Add support for timezones to Active Job Feb 22, 2018
activemodel Rails 6 requires Ruby 2.4.1+ Feb 17, 2018
activerecord Properly escape column name embedded into regexp Feb 22, 2018
activestorage Allow S3 tests against buckets in other regions Feb 21, 2018
activesupport Call `YAML.load` correctly Feb 21, 2018
ci Only run isolated tests on the latest stable ruby: that's now 2.5 Jan 24, 2018
guides We should call methods with `.method_name` not `::method_name`. Feb 21, 2018
railties Merge pull request #32018 from rails/add-nonce-support-to-csp Feb 22, 2018
tasks Remove unused variable `gem_version` from `tasks/release.rb` Sep 24, 2017
tools Use frozen string literal in tools/ Aug 13, 2017
.codeclimate.yml Keep current Code Climate behavior before upgrade Nov 30, 2017
.gitattributes adds .gitattributes to enable Ruby-awareness Mar 16, 2016
.gitignore Clean up and consolidate .gitignores Feb 17, 2018
.rubocop.yml Add cop for preferring 'Foo.method' over 'Foo::method' Feb 22, 2018
.travis.yml CI with `jruby-head` compatible with Ruby 2.4.1 Feb 21, 2018
.yardopts Let YARD document the railties gem Sep 10, 2010
CODE_OF_CONDUCT.md Move the CoC text to the Rails website Aug 21, 2015
CONTRIBUTING.md Remove html tag making markdown misrender [ci skip] Jun 6, 2017
Gemfile Rails 6 requires Ruby 2.3+ Feb 17, 2018
Gemfile.lock Update to sinatra 2.0.1 Feb 21, 2018
MIT-LICENSE Bump license years for 2018 Dec 31, 2017
RAILS_VERSION Start Rails 6.0 development!!! Jan 30, 2018
README.md Update MIT licenses link [ci skip] Aug 21, 2017
RELEASING_RAILS.md Fix grammar issue [ci skip] Oct 31, 2017
Rakefile Use frozen string literal in root files Aug 13, 2017
rails.gemspec Rails 6 requires Ruby 2.4.1+ Feb 17, 2018
version.rb Start Rails 6.0 development!!! Jan 30, 2018

README.md

Welcome to Rails

Rails is a web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.

Understanding the MVC pattern is key to understanding Rails. MVC divides your application into three layers, each with a specific responsibility.

The Model layer represents your domain model (such as Account, Product, Person, Post, etc.) and encapsulates the business logic that is specific to your application. In Rails, database-backed model classes are derived from ActiveRecord::Base. Active Record allows you to present the data from database rows as objects and embellish these data objects with business logic methods. You can read more about Active Record in its README. Although most Rails models are backed by a database, models can also be ordinary Ruby classes, or Ruby classes that implement a set of interfaces as provided by the Active Model module. You can read more about Active Model in its README.

The Controller layer is responsible for handling incoming HTTP requests and providing a suitable response. Usually this means returning HTML, but Rails controllers can also generate XML, JSON, PDFs, mobile-specific views, and more. Controllers load and manipulate models, and render view templates in order to generate the appropriate HTTP response. In Rails, incoming requests are routed by Action Dispatch to an appropriate controller, and controller classes are derived from ActionController::Base. Action Dispatch and Action Controller are bundled together in Action Pack. You can read more about Action Pack in its README.

The View layer is composed of "templates" that are responsible for providing appropriate representations of your application's resources. Templates can come in a variety of formats, but most view templates are HTML with embedded Ruby code (ERB files). Views are typically rendered to generate a controller response, or to generate the body of an email. In Rails, View generation is handled by Action View. You can read more about Action View in its README.

Active Record, Active Model, Action Pack, and Action View can each be used independently outside Rails. In addition to that, Rails also comes with Action Mailer (README), a library to generate and send emails; Active Job (README), a framework for declaring jobs and making them run on a variety of queueing backends; Action Cable (README), a framework to integrate WebSockets with a Rails application; Active Storage (README), a library to attach cloud and local files to Rails applications; and Active Support (README), a collection of utility classes and standard library extensions that are useful for Rails, and may also be used independently outside Rails.

Getting Started

  1. Install Rails at the command prompt if you haven't yet:

     $ gem install rails
    
  2. At the command prompt, create a new Rails application:

     $ rails new myapp
    

    where "myapp" is the application name.

  3. Change directory to myapp and start the web server:

     $ cd myapp
     $ rails server
    

    Run with --help or -h for options.

  4. Using a browser, go to http://localhost:3000 and you'll see: "Yay! You’re on Rails!"

  5. Follow the guidelines to start developing your application. You may find the following resources handy:

Contributing

Code Triage Badge

We encourage you to contribute to Ruby on Rails! Please check out the Contributing to Ruby on Rails guide for guidelines about how to proceed. Join us!

Trying to report a possible security vulnerability in Rails? Please check out our security policy for guidelines about how to proceed.

Everyone interacting in Rails and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the Rails code of conduct.

Code Status

Build Status

License

Ruby on Rails is released under the MIT License.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - reactjs/redux: Predictable state container for JavaScript apps
Skip to content
Predictable state container for JavaScript apps
JavaScript TypeScript CSS
Permalink
Failed to load latest commit information.
.github Update ISSUE_TEMPLATE.md May 29, 2016
build attempting to update the color scheme, and added a couple a11y fixes … Dec 18, 2017
docs Add links to the todo code elsewhere. Feb 20, 2018
examples Fix examples and todo app with VisibilityFilters export (#2848) Feb 20, 2018
logo Switch out non-ASCII quotes for ASCII versions. (#1874) Aug 1, 2016
src Fixed article (#2811) Jan 26, 2018
test Update TypeScript typings (#2773) Jan 24, 2018
.babelrc Optimize dispatch plain object check (#2599) Nov 16, 2017
.editorconfig editorconfig: do not trim trailing whitespaces in Markdown files Feb 18, 2016
.eslintignore Fix redux-mock-store libdef for todos-flow (#2430) Jun 1, 2017
.eslintrc.js Update deps and rollup config. Feb 15, 2018
.gitbook.yaml Don't scope pages to docs (#2843) Feb 18, 2018
.gitignore New documentation on the upcoming GitBook (#2837) Feb 16, 2018
.prettierrc.json Add prettier formatting to src and test (#2676) Dec 11, 2017
.travis.yml Travis is currently busted on Node 9 Nov 1, 2017
CHANGELOG.md rackt -> reactjs (see #1392) Feb 12, 2016
CNAME Ensure CNAME survives doc rebuilds Oct 13, 2015
CODE_OF_CONDUCT.md Bump Contributor Covenant to 1.4 Feb 9, 2016
CONTRIBUTING.md Correct information about running tests for examples Aug 6, 2017
LICENSE-logo.md Add Redux Logo (#1671) Apr 26, 2016
LICENSE.md Update LICENSE (#1650) Apr 22, 2016
PATRONS.md Correct PATRONS.md entry (#1746) May 19, 2016
README.md Update wording for "when to use Redux" Feb 21, 2018
index.d.ts Update TypeScript typings (#2773) Jan 24, 2018
package-lock.json 4.0.0-beta.2 Feb 15, 2018
package.json New documentation on the upcoming GitBook (#2837) Feb 16, 2018
rollup.config.js Update deps and rollup config. Feb 15, 2018

README.md

Redux Logo

Redux is a predictable state container for JavaScript apps.
(Not to be confused with a WordPress framework – Redux Framework.)

It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as live code editing combined with a time traveling debugger.

You can use Redux together with React, or with any other view library.
It is tiny (2kB, including dependencies).

build status npm version npm downloads redux channel on discord #rackt on freenode Changelog #187

Learn Redux from its creator:
Part 1: Getting Started with Redux (30 free videos)
Part 2: Building React Applications with Idiomatic Redux (27 free videos)

Testimonials

“Love what you're doing with Redux”
Jing Chen, creator of Flux

“I asked for comments on Redux in FB's internal JS discussion group, and it was universally praised. Really awesome work.”
Bill Fisher, author of Flux documentation

“It's cool that you are inventing a better Flux by not doing Flux at all.”
André Staltz, creator of Cycle

Before Proceeding Further

Redux is a valuable tool for organizing your state, but you should also consider whether it's appropriate for your situation. Here's some suggestions on when it makes sense to use Redux:

  • You have reasonable amounts of data changing over time
  • You need a single source of truth for your state
  • You find that keeping all your state in a top-level component is no longer sufficient

Yes, these guidelines are subjective and vague, but this is for good reason. The point at which you should integrate Redux into your application is different for every user and different for every application.

For more thoughts on how Redux is meant to be used, see:

Developer Experience

I wrote Redux while working on my React Europe talk called “Hot Reloading with Time Travel”. My goal was to create a state management library with minimal API but completely predictable behavior, so it is possible to implement logging, hot reloading, time travel, universal apps, record and replay, without any buy-in from the developer.

Influences

Redux evolves the ideas of Flux, but avoids its complexity by taking cues from Elm.
Whether you have used them or not, Redux only takes a few minutes to get started with.

Installation

To install the stable version:

npm install --save redux

This assumes you are using npm as your package manager.

If you're not, you can access these files on unpkg, download them, or point your package manager to them.

Most commonly people consume Redux as a collection of CommonJS modules. These modules are what you get when you import redux in a Webpack, Browserify, or a Node environment. If you like to live on the edge and use Rollup, we support that as well.

If you don't use a module bundler, it's also fine. The redux npm package includes precompiled production and development UMD builds in the dist folder. They can be used directly without a bundler and are thus compatible with many popular JavaScript module loaders and environments. For example, you can drop a UMD build as a <script> tag on the page, or tell Bower to install it. The UMD builds make Redux available as a window.Redux global variable.

The Redux source code is written in ES2015 but we precompile both CommonJS and UMD builds to ES5 so they work in any modern browser. You don't need to use Babel or a module bundler to get started with Redux.

Complementary Packages

Most likely, you'll also need the React bindings and the developer tools.

npm install --save react-redux
npm install --save-dev redux-devtools

Note that unlike Redux itself, many packages in the Redux ecosystem don't provide UMD builds, so we recommend using CommonJS module bundlers like Webpack and Browserify for the most comfortable development experience.

The Gist

The whole state of your app is stored in an object tree inside a single store.
The only way to change the state tree is to emit an action, an object describing what happened.
To specify how the actions transform the state tree, you write pure reducers.

That's it!

import { createStore } from 'redux'

/**
 * This is a reducer, a pure function with (state, action) => state signature.
 * It describes how an action transforms the state into the next state.
 *
 * The shape of the state is up to you: it can be a primitive, an array, an object,
 * or even an Immutable.js data structure. The only important part is that you should
 * not mutate the state object, but return a new object if the state changes.
 *
 * In this example, we use a `switch` statement and strings, but you can use a helper that
 * follows a different convention (such as function maps) if it makes sense for your
 * project.
 */
function counter(state = 0, action) {
  switch (action.type) {
  case 'INCREMENT':
    return state + 1
  case 'DECREMENT':
    return state - 1
  default:
    return state
  }
}

// Create a Redux store holding the state of your app.
// Its API is { subscribe, dispatch, getState }.
let store = createStore(counter)

// You can use subscribe() to update the UI in response to state changes.
// Normally you'd use a view binding library (e.g. React Redux) rather than subscribe() directly.
// However it can also be handy to persist the current state in the localStorage.

store.subscribe(() =>
  console.log(store.getState())
)

// The only way to mutate the internal state is to dispatch an action.
// The actions can be serialized, logged or stored and later replayed.
store.dispatch({ type: 'INCREMENT' })
// 1
store.dispatch({ type: 'INCREMENT' })
// 2
store.dispatch({ type: 'DECREMENT' })
// 1

Instead of mutating the state directly, you specify the mutations you want to happen with plain objects called actions. Then you write a special function called a reducer to decide how every action transforms the entire application's state.

If you're coming from Flux, there is a single important difference you need to understand. Redux doesn't have a Dispatcher or support many stores. Instead, there is just a single store with a single root reducing function. As your app grows, instead of adding stores, you split the root reducer into smaller reducers independently operating on the different parts of the state tree. This is exactly like how there is just one root component in a React app, but it is composed out of many small components.

This architecture might seem like an overkill for a counter app, but the beauty of this pattern is how well it scales to large and complex apps. It also enables very powerful developer tools, because it is possible to trace every mutation to the action that caused it. You can record user sessions and reproduce them just by replaying every action.

Learn Redux from Its Creator

Getting Started with Redux is a video course consisting of 30 videos narrated by Dan Abramov, author of Redux. It is designed to complement the “Basics” part of the docs while bringing additional insights about immutability, testing, Redux best practices, and using Redux with React. This course is free and will always be.

“Great course on egghead.io by @dan_abramov - instead of just showing you how to use #redux, it also shows how and why redux was built!”
Sandrino Di Mattia

“Plowing through @dan_abramov 'Getting Started with Redux' - its amazing how much simpler concepts get with video.”
Chris Dhanaraj

“This video series on Redux by @dan_abramov on @eggheadio is spectacular!”
Eddie Zaneski

“Come for the name hype. Stay for the rock solid fundamentals. (Thanks, and great job @dan_abramov and @eggheadio!)”
Dan

“This series of videos on Redux by @dan_abramov is repeatedly blowing my mind - gunna do some serious refactoring”
Laurence Roberts

So, what are you waiting for?

Watch the 30 Free Videos!

If you enjoyed my course, consider supporting Egghead by buying a subscription. Subscribers have access to the source code of every example in my videos and tons of advanced lessons on other topics, including JavaScript in depth, React, Angular, and more. Many Egghead instructors are also open source library authors, so buying a subscription is a nice way to thank them for the work that they've done.

Documentation

For PDF, ePub, and MOBI exports for offline reading, and instructions on how to create them, please see: paulkogel/redux-offline-docs.

For Offline docs, please see: devdocs

Examples

Almost all examples have a corresponding CodeSandbox sandbox. This is an interactive version of the code that you can play with online.

If you're new to the NPM ecosystem and have troubles getting a project up and running, or aren't sure where to paste the gist above, check out simplest-redux-example that uses Redux together with React and Browserify.

Discussion

Join the #redux channel of the Reactiflux Discord community.

Thanks

Special thanks to Jamie Paton for handing over the redux NPM package name.

Logo

You can find the official logo on GitHub.

Change Log

This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented on the Github Releases page.

Patrons

The work on Redux was funded by the community.
Meet some of the outstanding companies that made it possible:

See the full list of Redux patrons, as well as the always-growing list of people and companies that use Redux.

License

MIT

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - golang/go: The Go programming language
Skip to content
Go Assembly HTML C Shell Perl
Switch branches/tags
weekly.2012-03-27 weekly.2012-03-22 weekly.2012-03-13 weekly.2012-03-04 weekly.2012-02-22 weekly.2012-02-14 weekly.2012-02-07 weekly.2012-01-27 weekly.2012-01-20 weekly.2012-01-15 weekly.2011-12-22 weekly.2011-12-14 weekly.2011-12-06 weekly.2011-12-02 weekly.2011-12-01 weekly.2011-11-18 weekly.2011-11-09 weekly.2011-11-08 weekly.2011-11-02 weekly.2011-11-01 weekly.2011-10-26 weekly.2011-10-25 weekly.2011-10-18 weekly.2011-10-06 weekly.2011-09-21 weekly.2011-09-16 weekly.2011-09-07 weekly.2011-09-01 weekly.2011-08-17 weekly.2011-08-10 weekly.2011-07-29 weekly.2011-07-19 weekly.2011-07-07 weekly.2011-06-23 weekly.2011-06-16 weekly.2011-06-09 weekly.2011-06-02 weekly.2011-05-22 weekly.2011-04-27 weekly.2011-04-13 weekly.2011-04-04 weekly.2011-03-28 weekly.2011-03-15 weekly.2011-03-07.1 weekly.2011-03-07 weekly.2011-02-24 weekly.2011-02-15 weekly.2011-02-01.1 weekly.2011-02-01 weekly.2011-01-20 weekly.2011-01-19 weekly.2011-01-12 weekly.2011-01-06 weekly.2010-12-22 weekly.2010-12-15.1 weekly.2010-12-15 weekly.2010-12-08 weekly.2010-12-02 weekly.2010-11-23 weekly.2010-11-10 weekly.2010-11-02 weekly.2010-10-27 weekly.2010-10-20 weekly.2010-10-13.1 weekly.2010-10-13 weekly.2010-09-29 weekly.2010-09-22 weekly.2010-09-15 weekly.2010-09-06 weekly.2010-08-25 weekly.2010-08-11 weekly.2010-08-04 weekly.2010-07-29 weekly.2010-07-14 weekly.2010-07-01 weekly.2010-06-21 weekly.2010-06-09 weekly.2010-05-27 weekly.2010-05-04 weekly.2010-04-27 weekly.2010-04-13 weekly.2010-03-30 weekly.2010-03-22 weekly.2010-03-15 weekly.2010-03-04 weekly.2010-02-23 weekly.2010-02-17 weekly.2010-02-04 weekly.2010-01-27 weekly.2010-01-13 weekly.2010-01-05 weekly.2009-12-22 weekly.2009-12-09 weekly.2009-12-07 weekly.2009-11-17 weekly.2009-11-12 weekly.2009-11-10.1 weekly.2009-11-10 weekly.2009-11-06 weekly
Nothing to show
Latest commit 6450c59 Feb 22, 2018
tklauser syscall: remove list of unimplemented syscalls
The syscall package is frozen and we don't want to encourage anyone to
implement these syscalls.

Change-Id: I6b6e33e32a4b097da6012226aa15300735e50e9f
Reviewed-on: https://go-review.googlesource.com/96315
Reviewed-by: Ian Lance Taylor <iant@golang.org>

README.md

The Go Programming Language

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

Gopher image Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.

Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.

Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.

Download and Install

Binary Distributions

Official binary distributions are available at https://golang.org/dl/.

After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.

Install From Source

If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.

Contributing

Go is the work of hundreds of contributors. We appreciate your help!

To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html

Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - webpack/webpack: A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows to load parts for the application on demand. Through "loaders," modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.
Skip to content
A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows to load parts for the application on demand. Through "loaders," modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.
JavaScript Other
Switch branches/tags
Latest commit ed30285 Feb 22, 2018
sokra Merge pull request #6546 from webpack/bot/review-permission
only set labels for reviews by users with write permission
Permalink
Failed to load latest commit information.
.github Added missing Serial Comma to issue template Feb 13, 2018
benchmark refactor(es6): multiline string, arr.includes, arrow functions in ./l… Feb 17, 2018
bin replace tab with space Jan 3, 2018
buildin readd previous checks - refactor System polyfill Feb 28, 2017
examples Merge pull request #6470 from suguru03/feature/neo-async Feb 19, 2018
hot Fix bluebird warning in hot/signal Dec 29, 2017
lib Merge pull request #6523 from webpack/next Feb 20, 2018
schemas Merge pull request #6532 from webpack/bugfix/issue-6426-name Feb 21, 2018
test Merge pull request #6529 from webpack/test/wasm-order Feb 21, 2018
web_modules make it webpack-able Jul 10, 2013
.editorconfig Improved bot Apr 3, 2017
.eslintrc.js fix(eslint): correct keyword after spacing rule for eslint) Dec 16, 2017
.gitattributes fixed small issues with new loader-runner Dec 30, 2015
.gitignore Examples write to dist Jan 9, 2018
.istanbul.yml separate integration and unit tests, use codecov flags Oct 19, 2017
.jsbeautifyrc better beautify scripts Jul 15, 2015
.travis.yml Do not install yarn on Travis Jan 9, 2018
CONTRIBUTING.md Reword discussions body Feb 18, 2018
LICENSE Update copyright statement Nov 23, 2016
README.md Merge pull request #6523 from webpack/next Feb 20, 2018
appveyor.yml separate integration and unit tests, use codecov flags Oct 19, 2017
circle.yml fix(ci): remove v4 node from ci versions Nov 6, 2017
codecov.yml separate integration and unit tests, use codecov flags Oct 19, 2017
open-bot.yaml only set labels for reviews by users with write permission Feb 21, 2018
package.json Merge pull request #6470 from suguru03/feature/neo-async Feb 19, 2018
yarn.lock replace Async with Neo-Async Feb 11, 2018

README.md



npm

node deps tests builds coverage licenses


webpack

webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

Install

Install with npm:

npm install --save-dev webpack

Install with yarn:

yarn add webpack --dev

Introduction

This README reflects Webpack v2.x and v3.x. The Webpack v1.x documentation has been deprecated and deleted.

webpack is a bundler for modules. The main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

TL;DR

  • Bundles ES Modules, CommonJS and AMD modules (even combined).
  • Can create a single bundle or multiple chunks that are asynchronously loaded at runtime (to reduce initial loading time).
  • Dependencies are resolved during compilation, reducing the runtime size.
  • Loaders can preprocess files while compiling, e.g. TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc.
  • Highly modular plugin system to do whatever else your application requires.

Get Started

Check out webpack's quick Get Started guide and the other guides.

Concepts

Plugins

webpack has a rich plugin interface. Most of the features within webpack itself use this plugin interface. This makes webpack very flexible.

Name Status Description
common-chunks-webpack-plugin common-npm Generates chunks of common modules shared between entry points and splits them into separate bundles (e.g vendor.bundle.js && app.bundle.js)
extract-text-webpack-plugin extract-npm Extracts Text (CSS) from your bundles into a separate file (app.bundle.css)
compression-webpack-plugin compression-npm Prepares compressed versions of assets to serve them with Content-Encoding
i18n-webpack-plugin i18n-npm Adds i18n support to your bundles
html-webpack-plugin html-plugin-npm Simplifies creation of HTML files (index.html) to serve your bundles

Loaders

webpack enables use of loaders to preprocess files. This allows you to bundle any static resource way beyond JavaScript. You can easily write your own loaders using Node.js.

Loaders are activated by using loadername! prefixes in require() statements, or are automatically applied via regex from your webpack configuration.

Files

Name Status Description
raw-loader raw-npm Loads raw content of a file (utf-8)
val-loader val-npm Executes code as module and considers exports as JS code
url-loader url-npm Works like the file loader, but can return a Data Url if the file is smaller than a limit
file-loader file-npm Emits the file into the output folder and returns the (relative) url

JSON

Name Status Description
json-npm Loads a JSON file (included by default)
json5-npm Loads and transpiles a JSON 5 file
cson-npm Loads and transpiles a CSON file

Transpiling

Name Status Description
<script> script-npm Executes a JavaScript file once in global context (like in script tag), require()s are not parsed
babel-npm Loads ES2015+ code and transpiles to ES5 using Babel
traceur-npm Loads ES2015+ code and transpiles to ES5 using Traceur
type-npm Loads TypeScript like JavaScript
awesome-typescript-loader awesome-typescript-npm Awesome TypeScript loader for webpack
coffee-npm Loads CoffeeScript like JavaScript

Templating

Name Status Description
html-npm Exports HTML as string, requires references to static resources
pug-npm Loads Pug templates and returns a function
jade-npm Loads Jade templates and returns a function
md-npm Compiles Markdown to HTML
posthtml-npm Loads and transforms a HTML file using PostHTML
hbs-npm Compiles Handlebars to HTML

Styling

Name Status Description
<style> style-npm Add exports of a module as style to DOM
css-npm Loads CSS file with resolved imports and returns CSS code
less-npm Loads and compiles a LESS file
sass-npm Loads and compiles a SASS/SCSS file
stylus-npm Loads and compiles a Stylus file
postcss-npm Loads and transforms a CSS/SSS file using PostCSS

Linting & Testing

Name Status Description
mocha-npm Tests with mocha (Browser/NodeJS)
eslint-npm PreLoader for linting code using ESLint
jshint-npm PreLoader for linting code using JSHint

Frameworks

Name Status Description
vue-npm Loads and compiles Vue Components
polymer-npm Process HTML & CSS with preprocessor of choice and require() Web Components like first-class modules
angular-npm Loads and compiles Angular 2 Components
riot-npm Riot official webpack loader

Performance

webpack uses async I/O and has multiple caching levels. This makes webpack fast and incredibly fast on incremental compilations.

Module Formats

webpack supports ES2015+, CommonJS and AMD modules out of the box. It performs clever static analysis on the AST of your code. It even has an evaluation engine to evaluate simple expressions. This allows you to support most existing libraries out of the box.

Code Splitting

webpack allows you to split your codebase into multiple chunks. Chunks are loaded asynchronously at runtime. This reduces the initial loading time.

Optimizations

webpack can do many optimizations to reduce the output size of your JavaScript by deduplicating frequently used modules, minifying, and giving you full control of what is loaded initially and what is loaded at runtime through code splitting. It can also make your code chunks cache friendly by using hashes.

Contributing

We want contributing to webpack to be fun, enjoyable, and educational for anyone, and everyone. We have a vibrant ecosystem that spans beyond this single repo. We welcome you to check out any of the repositories in our organization or webpack-contrib organization which houses all of our loaders and plugins.

Contributions go far beyond pull requests and commits. Although we love giving you the opportunity to put your stamp on webpack, we also are thrilled to receive a variety of other contributions including:

  • Documentation updates, enhancements, designs, or bugfixes
  • Spelling or grammar fixes
  • README.md corrections or redesigns
  • Adding unit, or functional tests
  • Triaging GitHub issues -- especially determining whether an issue still persists or is reproducible.
  • Searching #webpack on twitter and helping someone else who needs help
  • Teaching others how to contribute to one of the many webpack's repos!
  • Blogging, speaking about, or creating tutorials about one of webpack's many features.
  • Helping others in our webpack gitter channel.

If you are worried or don't know where to start, you can always reach out to Sean Larkin (@TheLarkInn) on Twitter or simply submit an issue and a maintainer can help give you guidance!

We have also started a series on our Medium Publication called The Contributor's Guide to webpack. We welcome you to read it and post any questions or responses if you still need help.

Looking to speak about webpack? We'd love to review your talk abstract/CFP! You can email it to webpack [at] opencollective [dot] com and we can give pointers or tips!!!

Creating your own plugins and loaders

If you create a loader or plugin, we would <3 for you to open source it, and put it on npm. We follow the x-loader, x-webpack-plugin naming convention.

Support

We consider webpack to be a low-level tool used not only individually but also layered beneath other awesome tools. Because of it's flexibility, webpack isn't always the easiest entry-level solution, however we do believe it is the most powerful. That said, we're always looking for ways improve and simplify the tool without compromising functionality. If you have any ideas on ways to accomplish this, we're all ears!

If you're just getting started, take a look at our new docs and concepts page. This has a high level overview that is great for beginners!!

If you want to discuss something or just need help, here is our Gitter room where there are always individuals looking to help out!

If you are still having difficulty, we would love for you to post a question to StackOverflow with the webpack tag. It is much easier to answer questions that include your webpack.config.js and relevant files! So if you can provide them, we'd be extremely grateful (and more likely to help you find the answer!)

If you are twitter savvy you can tweet #webpack with your question and someone should be able to reach out and help also.

If you have discovered a 🐜 or have a feature suggestion, feel free to create an issue on Github.

License

FOSSA Status

Core Team


Tobias Koppers

Core


Founder of webpack


Johannes Ewald

Loaders & Plugins


Early adopter of webpack


Sean T. Larkin

Public Relations


Founder of the core team


Juho Vepsäläinen

Documentation


Author



Kees Kluskens

Development


Sponsor


Sponsoring

Most of the core team members, webpack contributors and contributors in the ecosystem do this open source work in their free time. If you use webpack for a serious task, and you'd like us to invest more time on it, please donate. This project increases your income/productivity too. It makes development and applications faster and it reduces the required bandwidth.

This is how we use the donations:

  • Allow the core team to work on webpack
  • Thank contributors if they invested a large amount of time in contributing
  • Support projects in the ecosystem that are of great value for users
  • Support projects that are voted most (work in progress)
  • Infrastructure cost
  • Fees for money handling

Premium Partners

Other Backers and Sponsors

Before we started using OpenCollective, donations were made anonymously. Now that we have made the switch, we would like to acknowledge these sponsors (and the ones who continue to donate using OpenCollective). If we've missed someone, please send us a PR, and we'll add you to this list.

Gold Sponsors

Become a gold sponsor and get your logo on our README on Github with a link to your site.

Silver Sponsors

Become a silver sponsor and get your logo on our README on Github with a link to your site.

Bronze Sponsors

Become a bronze sponsor and get your logo on our README on Github with a link to your site.

Backers

Become a backer and get your image on our README on Github with a link to your site.

Thanks to

(In chronological order)

  • @google for Google Web Toolkit (GWT), which aims to compile Java to JavaScript. It features a similar Code Splitting as webpack.
  • @medikoo for modules-webmake, which is a similar project. webpack was born because I wanted Code Splitting for modules-webmake. Interestingly the Code Splitting issue is still open (thanks also to @Phoscur for the discussion).
  • @substack for browserify, which is a similar project and source for many ideas.
  • @jrburke for require.js, which is a similar project and source for many ideas.
  • @defunctzombie for the browser-field spec, which makes modules available for node.js, browserify and webpack.
  • Every early webpack user, which contributed to webpack by writing issues or PRs. You influenced the direction...
  • @shama, @jhnns and @sokra for maintaining this project
  • Everyone who has written a loader for webpack. You are the ecosystem...
  • Everyone I forgot to mention here, but also influenced webpack.
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - expressjs/express: Fast, unopinionated, minimalist web framework for node.
Skip to content
Fast, unopinionated, minimalist web framework for node.
JavaScript Other

Readme.md

Express Logo

Fast, unopinionated, minimalist web framework for node.

NPM Version NPM Downloads Linux Build Windows Build Test Coverage

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World')
})

app.listen(3000)

Installation

This is a Node.js module available through the npm registry.

Before installing, download and install Node.js. Node.js 0.10 or higher is required.

Installation is done using the npm install command:

$ npm install express

Follow our installing guide for more information.

Features

  • Robust routing
  • Focus on high performance
  • Super-high test coverage
  • HTTP helpers (redirection, caching, etc)
  • View system supporting 14+ template engines
  • Content negotiation
  • Executable for generating applications quickly

Docs & Community

PROTIP Be sure to read Migrating from 3.x to 4.x as well as New features in 4.x.

Security Issues

If you discover a security vulnerability in Express, please see Security Policies and Procedures.

Quick Start

The quickest way to get started with express is to utilize the executable express(1) to generate an application as shown below:

Install the executable. The executable's major version will match Express's:

$ npm install -g express-generator@4

Create the app:

$ express /tmp/foo && cd /tmp/foo

Install dependencies:

$ npm install

Start the server:

$ npm start

Philosophy

The Express philosophy is to provide small, robust tooling for HTTP servers, making it a great solution for single page applications, web sites, hybrids, or public HTTP APIs.

Express does not force you to use any specific ORM or template engine. With support for over 14 template engines via Consolidate.js, you can quickly craft your perfect framework.

Examples

To view the examples, clone the Express repo and install the dependencies:

$ git clone git://github.com/expressjs/express.git --depth 1
$ cd express
$ npm install

Then run whichever example you want:

$ node examples/content-negotiation

Tests

To run the test suite, first install the dependencies, then run npm test:

$ npm install
$ npm test

People

The original author of Express is TJ Holowaychuk

The current lead maintainer is Douglas Christopher Wilson

List of all contributors

License

MIT

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - axios/axios: Promise based HTTP client for the browser and node.js
Skip to content
Promise based HTTP client for the browser and node.js
JavaScript TypeScript HTML
Latest commit a105872 Feb 20, 2018
emilyemorehouse Merge pull request #1122 from Nilegfx/bugfix/allow-method-in-instance…
…-config

Fixing default method for an instance always overwritten by get
Permalink
Failed to load latest commit information.
.github Fix Markdown formatting for issue and pull request template Jan 7, 2018
dist Releasing v0.18.0 Feb 19, 2018
examples Update links Sep 29, 2017
lib Merge branch 'master' into bugfix/allow-method-in-instance-config Feb 20, 2018
sandbox Adding custom URL support in sandbox client Sep 30, 2014
test Follow up to #1070: Feb 17, 2018
.eslintrc Updating dependencies Mar 6, 2016
.gitignore Adding TypeScript definitions for interceptors Aug 16, 2016
.npmignore Adding TypeScript definitions for interceptors Aug 16, 2016
.travis.yml Attempting to fix Travis build Sep 23, 2016
CHANGELOG.md Prepping for release: updating CHANGELOG. Feb 19, 2018
CODE_OF_CONDUCT.md Adding code of conduct and collaborator guide Mar 2, 2016
COLLABORATOR_GUIDE.md Update links Sep 29, 2017
CONTRIBUTING.md Update links Sep 29, 2017
COOKBOOK.md Update COOKBOOK.md Sep 27, 2016
ECOSYSTEM.md Add reference to axios-fetch in ECOSYSTEM.md Feb 14, 2018
Gruntfile.js Removing Promise from axios typings in favor of built-in type declara… Mar 15, 2017
LICENSE Update license date Dec 31, 2017
README.md Merge pull request #1364 from MiguelMadero/mmadero/documents-timeout Feb 17, 2018
UPGRADE_GUIDE.md Update links Sep 29, 2017
bower.json Releasing v0.18.0 Feb 19, 2018
index.d.ts fix(index.d.ts): Remove redundant types Dec 21, 2017
index.js Adding initial source Aug 18, 2014
karma.conf.js Fix SauceLabs config Oct 20, 2017
package.json Releasing v0.18.0 Feb 19, 2018
webpack.config.js Fixing UMD build Oct 15, 2016

README.md

axios

npm version build status code coverage npm downloads gitter chat code helpers

Promise based HTTP client for the browser and node.js

Features

  • Make XMLHttpRequests from the browser
  • Make http requests from node.js
  • Supports the Promise API
  • Intercept request and response
  • Transform request and response data
  • Cancel requests
  • Automatic transforms for JSON data
  • Client side support for protecting against XSRF

Browser Support

Chrome Firefox Safari Opera Edge IE
Latest ✔ Latest ✔ Latest ✔ Latest ✔ Latest ✔ 8+ ✔

Browser Matrix

Installing

Using npm:

$ npm install axios

Using bower:

$ bower install axios

Using cdn:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Example

Performing a GET request

// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// Optionally the request above could also be done as
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Performing a POST request

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Performing multiple concurrent requests

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // Both requests are now complete
  }));

axios API

Requests can be made by passing the relevant config to axios.

axios(config)
// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});
// GET request for remote image
axios({
  method:'get',
  url:'http://bit.ly/2mTM3nY',
  responseType:'stream'
})
  .then(function(response) {
  response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
});
axios(url[, config])
// Send a GET request (default method)
axios('/user/12345');

Request method aliases

For convenience aliases have been provided for all supported request methods.

axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
NOTE

When using the alias methods url, method, and data properties don't need to be specified in config.

Concurrency

Helper functions for dealing with concurrent requests.

axios.all(iterable)
axios.spread(callback)

Creating an instance

You can create a new instance of axios with a custom config.

axios.create([config])
var instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

Instance methods

The available instance methods are listed below. The specified config will be merged with the instance config.

axios#request(config)
axios#get(url[, config])
axios#delete(url[, config])
axios#head(url[, config])
axios#options(url[, config])
axios#post(url[, data[, config]])
axios#put(url[, data[, config]])
axios#patch(url[, data[, config]])

Request Config

These are the available config options for making requests. Only the url is required. Requests will default to GET if method is not specified.

{
  // `url` is the server URL that will be used for the request
  url: '/user',

  // `method` is the request method to be used when making the request
  method: 'get', // default

  // `baseURL` will be prepended to `url` unless `url` is absolute.
  // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
  // to methods of that instance.
  baseURL: 'https://some-domain.com/api/',

  // `transformRequest` allows changes to the request data before it is sent to the server
  // This is only applicable for request methods 'PUT', 'POST', and 'PATCH'
  // The last function in the array must return a string or an instance of Buffer, ArrayBuffer,
  // FormData or Stream
  // You may modify the headers object.
  transformRequest: [function (data, headers) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `transformResponse` allows changes to the response data to be made before
  // it is passed to then/catch
  transformResponse: [function (data) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `headers` are custom headers to be sent
  headers: {'X-Requested-With': 'XMLHttpRequest'},

  // `params` are the URL parameters to be sent with the request
  // Must be a plain object or a URLSearchParams object
  params: {
    ID: 12345
  },

  // `paramsSerializer` is an optional function in charge of serializing `params`
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function(params) {
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  },

  // `data` is the data to be sent as the request body
  // Only applicable for request methods 'PUT', 'POST', and 'PATCH'
  // When no `transformRequest` is set, must be of one of the following types:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - Browser only: FormData, File, Blob
  // - Node only: Stream, Buffer
  data: {
    firstName: 'Fred'
  },

  // `timeout` specifies the number of milliseconds before the request times out.
  // If the request takes longer than `timeout`, the request will be aborted.
  timeout: 1000,

  // `withCredentials` indicates whether or not cross-site Access-Control requests
  // should be made using credentials
  withCredentials: false, // default

  // `adapter` allows custom handling of requests which makes testing easier.
  // Return a promise and supply a valid response (see lib/adapters/README.md).
  adapter: function (config) {
    /* ... */
  },

  // `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
  // This will set an `Authorization` header, overwriting any existing
  // `Authorization` custom headers you have set using `headers`.
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },

  // `responseType` indicates the type of data that the server will respond with
  // options are 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
  responseType: 'json', // default

  // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
  xsrfCookieName: 'XSRF-TOKEN', // default

  // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
  xsrfHeaderName: 'X-XSRF-TOKEN', // default

  // `onUploadProgress` allows handling of progress events for uploads
  onUploadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `onDownloadProgress` allows handling of progress events for downloads
  onDownloadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `maxContentLength` defines the max size of the http response content allowed
  maxContentLength: 2000,

  // `validateStatus` defines whether to resolve or reject the promise for a given
  // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
  // or `undefined`), the promise will be resolved; otherwise, the promise will be
  // rejected.
  validateStatus: function (status) {
    return status >= 200 && status < 300; // default
  },

  // `maxRedirects` defines the maximum number of redirects to follow in node.js.
  // If set to 0, no redirects will be followed.
  maxRedirects: 5, // default

  // `socketPath` defines a UNIX Socket to be used in node.js.
  // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
  // Only either `socketPath` or `proxy` can be specified.
  // If both are specified, `socketPath` is used.
  socketPath: null, // default

  // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
  // and https requests, respectively, in node.js. This allows options to be added like
  // `keepAlive` that are not enabled by default.
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),

  // 'proxy' defines the hostname and port of the proxy server
  // Use `false` to disable proxies, ignoring environment variables.
  // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
  // supplies credentials.
  // This will set an `Proxy-Authorization` header, overwriting any existing
  // `Proxy-Authorization` custom headers you have set using `headers`.
  proxy: {
    host: '127.0.0.1',
    port: 9000,
    auth: {
      username: 'mikeymike',
      password: 'rapunz3l'
    }
  },

  // `cancelToken` specifies a cancel token that can be used to cancel the request
  // (see Cancellation section below for details)
  cancelToken: new CancelToken(function (cancel) {
  })
}

Response Schema

The response for a request contains the following information.

{
  // `data` is the response that was provided by the server
  data: {},

  // `status` is the HTTP status code from the server response
  status: 200,

  // `statusText` is the HTTP status message from the server response
  statusText: 'OK',

  // `headers` the headers that the server responded with
  // All header names are lower cased
  headers: {},

  // `config` is the config that was provided to `axios` for the request
  config: {},

  // `request` is the request that generated this response
  // It is the last ClientRequest instance in node.js (in redirects)
  // and an XMLHttpRequest instance the browser
  request: {}
}

When using then, you will receive the response as follows:

axios.get('/user/12345')
  .then(function(response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

When using catch, or passing a rejection callback as second parameter of then, the response will be available through the error object as explained in the Handling Errors section.

Config Defaults

You can specify config defaults that will be applied to every request.

Global axios defaults

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

Custom instance defaults

// Set config defaults when creating the instance
var instance = axios.create({
  baseURL: 'https://api.example.com'
});

// Alter defaults after instance has been created
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

Config order of precedence

Config will be merged with an order of precedence. The order is library defaults found in lib/defaults.js, then defaults property of the instance, and finally config argument for the request. The latter will take precedence over the former. Here's an example.

// Create an instance using the config defaults provided by the library
// At this point the timeout config value is `0` as is the default for the library
var instance = axios.create();

// Override timeout default for the library
// Now all requests will wait 2.5 seconds before timing out
instance.defaults.timeout = 2500;

// Override timeout for this request as it's known to take a long time
instance.get('/longRequest', {
  timeout: 5000
});

Interceptors

You can intercept requests or responses before they are handled by then or catch.

// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Do something with response data
    return response;
  }, function (error) {
    // Do something with response error
    return Promise.reject(error);
  });

If you may need to remove an interceptor later you can.

var myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

You can add interceptors to a custom instance of axios.

var instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

Handling Errors

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

You can define a custom HTTP status code error range using the validateStatus config option.

axios.get('/user/12345', {
  validateStatus: function (status) {
    return status < 500; // Reject only if the status code is greater than or equal to 500
  }
})

Cancellation

You can cancel a request using a cancel token.

The axios cancel token API is based on the withdrawn cancelable promises proposal.

You can create a cancel token using the CancelToken.source factory as shown below:

var CancelToken = axios.CancelToken;
var source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function(thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');

You can also create a cancel token by passing an executor function to the CancelToken constructor:

var CancelToken = axios.CancelToken;
var cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  })
});

// cancel the request
cancel();

Note: you can cancel several requests with the same cancel token.

Using application/x-www-form-urlencoded format

By default, axios serializes JavaScript objects to JSON. To send data in the application/x-www-form-urlencoded format instead, you can use one of the following options.

Browser

In a browser, you can use the URLSearchParams API as follows:

var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Note that URLSearchParams is not supported by all browsers (see caniuse.com), but there is a polyfill available (make sure to polyfill the global environment).

Alternatively, you can encode data using the qs library:

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

Node.js

In node.js, you can use the querystring module as follows:

var querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

You can also use the qs library.

Semver

Until axios reaches a 1.0 release, breaking changes will be released with a new minor version. For example 0.5.1, and 0.5.4 will have the same API, but 0.6.0 will have breaking changes.

Promises

axios depends on a native ES6 Promise implementation to be supported. If your environment doesn't support ES6 Promises, you can polyfill.

TypeScript

axios includes TypeScript definitions.

import axios from 'axios';
axios.get('/user?ID=12345');

Resources

Credits

axios is heavily inspired by the $http service provided in Angular. Ultimately axios is an effort to provide a standalone $http-like service for use outside of Angular.

License

MIT

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - nodejs/node-v0.x-archive: Moved to https://github.com/nodejs/node
Skip to content
This repository has been archived by the owner. It is now read-only.
Switch branches/tags
Latest commit 2a73a6a Aug 13, 2017
refack authored and gibfahn committed Aug 13, 2017 meta: redirect to active repo (#26598)
PR-URL: #26598
Refs: nodejs/node#14662
Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Permalink
Failed to load latest commit information.
.github meta: redirect to active repo (#26598) Aug 12, 2017
README.md Node.js has moved Sep 16, 2015

README.md

This repository is an archive of Node.js before the move to nodejs/node.

It still contains issues and pull requests that are relevant to Node versions v0.10 and v0.12, and that were opened before the move to nodejs/node. New issues and pull requests, for all branches, should be opened at nodejs/node. New issues and pull requests opened here will automatically be rejected.

The pre-convergence version of the README is available here.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - moment/moment: Parse, validate, manipulate, and display dates in javascript.
Skip to content
Parse, validate, manipulate, and display dates in javascript.
JavaScript Other
Latest commit a1b527f Dec 28, 2017
JLHwung authored and marwahaha committed Dec 28, 2017 [misc] fix deprecated rollup options (#4371)
* fix(rollup): fix deprecated rollup options

* chore(travis): test against on node 8
Permalink
Failed to load latest commit information.
benchmarks Added isObjectEmpty benchmark. Aug 6, 2017
locale Build 2.20.1 Dec 19, 2017
meteor Bump version to 2.20.1 Dec 19, 2017
min Build 2.20.1 Dec 19, 2017
scripts Fix fatal error Mar 2, 2017
src Bump version to 2.20.1 Dec 19, 2017
tasks [misc] fix deprecated rollup options (#4371) Dec 28, 2017
templates Apply custom header to generated files Nov 6, 2016
typing-tests [misc] Add 'ss' relative time key to typescript definition (#4246) Dec 11, 2017
.editorconfig Add .editorconfig for project May 4, 2015
.gitattributes Introduce end-of-line normalization Mar 24, 2016
.gitignore added uzbek latin locale Mar 2, 2017
.jscs.json Fix jscs 3.0 error: 'The `esnext` option is enabled by default.' Jun 7, 2016
.jshintrc Clean up jscs and jshint errors in tests. Mar 25, 2015
.npmignore Remove npmignore file from npm package Sep 1, 2016
.spmignore ignore files in packages May 4, 2015
.travis.yml [misc] fix deprecated rollup options (#4371) Dec 28, 2017
CHANGELOG.md Update changelog for 2.20.1 Dec 19, 2017
CONTRIBUTING.md Create _isValid property for durations Mar 2, 2017
Gruntfile.js Revert "Merge pull request #3848 from marwahaha:add-coveralls" Aug 7, 2017
ISSUE_TEMPLATE.md moment issue template Jun 24, 2016
LICENSE license typo Nov 1, 2016
Moment.js.nuspec Bump version to 2.20.1 Dec 19, 2017
README.md Add license report and scan status Aug 7, 2017
bower.json remove tests when installing moment through bower Aug 7, 2017
component.json Bump version to 2.20.1 Dec 19, 2017
composer.json Prefer HTTPS links when they exist Mar 11, 2017
ender.js play nicely within an Ender build Apr 4, 2012
moment.d.ts [misc] Add optional parameter keepOffset to toISOString (#4357) Dec 19, 2017
moment.js Build 2.20.1 Dec 19, 2017
package.js add a dojo build profile Nov 26, 2012
package.json Bump version to 2.20.1 Dec 19, 2017

README.md

Join the chat at https://gitter.im/moment/moment

NPM version NPM downloads MIT License Build Status Coverage Status FOSSA Status

A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.

Documentation

Port to ECMAScript 6 (version 2.10.0)

Moment 2.10.0 does not bring any new features, but the code is now written in ECMAScript 6 modules and placed inside src/. Previously moment.js, locale/*.js and test/moment/*.js, test/locale/*.js contained the source of the project. Now the source is in src/, temporary build (ECMAScript 5) files are placed under build/umd/ (for running tests during development), and the moment.js and locale/*.js files are updated only on release.

If you want to use a particular revision of the code, make sure to run grunt transpile update-index, so moment.js and locales/*.js are synced with src/*. We might place that in a commit hook in the future.

Upgrading to 2.0.0

There are a number of small backwards incompatible changes with version 2.0.0. See the full descriptions here

  • Changed language ordinal method to return the number + ordinal instead of just the ordinal.

  • Changed two digit year parsing cutoff to match strptime.

  • Removed moment#sod and moment#eod in favor of moment#startOf and moment#endOf.

  • Removed moment.humanizeDuration() in favor of moment.duration().humanize().

  • Removed the lang data objects from the top level namespace.

  • Duplicate Date passed to moment() instead of referencing it.

Changelog

Contributing

We're looking for co-maintainers! If you want to become a master of time please write to ichernev.

License

Moment.js is freely distributable under the terms of the MIT license.

FOSSA Status

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - chartjs/Chart.js: Simple HTML5 Charts using the <canvas> tag
Skip to content
JavaScript Shell
Latest commit c2a5b12 Feb 20, 2018
jcopperfield and etimberg Bugfix: Improve polyfill function of log10 to return whole powers of …
…10 (#5275)

* Bugfix: Improve polyfill function of log10 to return whole powers of 10
        as integer values, as it caused endless loop in IE11 in the tick
        creation loop.

* Compare floating-point numbers directly instead of using unnecessary division.
Permalink
Failed to load latest commit information.
.github Combine the two contributing docs Apr 17, 2017
docs Make both README.md and installation.md clearer (#5274) Feb 20, 2018
samples Setup HTML and JS linters for samples (#5195) Feb 3, 2018
scripts Deploy to GitHub pages (#4256) May 19, 2017
src Bugfix: Improve polyfill function of log10 to return whole powers of … Feb 20, 2018
test Bugfix: Improve polyfill function of log10 to return whole powers of … Feb 20, 2018
.codeclimate.yml Use the Chart.js shared ESLint config (#5112) Jan 6, 2018
.editorconfig Fix tests on OSX with retina screen Aug 5, 2017
.eslintignore Update git ignore to make it easier to switch between branches. Add c… Feb 14, 2016
.eslintrc.yml Setup HTML and JS linters for samples (#5195) Feb 3, 2018
.gitignore Ignore package-lock.json (#5138) Jan 11, 2018
.htmllintrc Setup HTML and JS linters for samples (#5195) Feb 3, 2018
.npmignore Make Travis to release the npm package Jun 18, 2016
.travis.yml Suppress coveralls errors if run from fork (#4699) Nov 1, 2017
LICENSE.md Update license year and copyright holders (#5053) Dec 31, 2017
MAINTAINING.md Fix broken links in Maintaining.md Sep 13, 2016
README.md Make both README.md and installation.md clearer (#5274) Feb 20, 2018
book.json Improve title of generated documentation (#5256) Feb 16, 2018
composer.json Add composer.json Mar 14, 2016
gulpfile.js Setup HTML and JS linters for samples (#5195) Feb 3, 2018
karma.conf.js Attempt to fix test flakiness (Firefox) (#4880) Oct 22, 2017
package.json Setup HTML and JS linters for samples (#5195) Feb 3, 2018

README.md

Chart.js

travis coveralls codeclimate slack

Simple HTML5 Charts using the canvas element chartjs.org

Installation

You can download the latest version of Chart.js from the GitHub releases or use a Chart.js CDN.

To install via npm:

npm install chart.js --save

To install via bower:

bower install chart.js --save

Selecting the Correct Build

Chart.js provides two different builds for you to choose: Stand-Alone Build, Bundled Build.

Stand-Alone Build

Files:

  • dist/Chart.js
  • dist/Chart.min.js

The stand-alone build includes Chart.js as well as the color parsing library. If this version is used, you are required to include Moment.js before Chart.js for the functionality of the time axis.

Bundled Build

Files:

  • dist/Chart.bundle.js
  • dist/Chart.bundle.min.js

The bundled build includes Moment.js in a single file. You should use this version if you require time axes and want to include a single file. You should not use this build if your application already included Moment.js. Otherwise, Moment.js will be included twice which results in increasing page load time and possible version compatability issues.

Documentation

You can find documentation at www.chartjs.org/docs. The markdown files that build the site are available under /docs. Previous version documentation is available at www.chartjs.org/docs/latest/developers/#previous-versions.

Contributing

Before submitting an issue or a pull request, please take a moment to look over the contributing guidelines first. For support using Chart.js, please post questions with the chartjs tag on Stack Overflow.

Building

Instructions on building and testing Chart.js can be found in the documentation.

Thanks

  • BrowserStack for allowing our team to test on thousands of browsers.
  • @n8agrin for the Twitter handle donation.

License

Chart.js is available under the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - resume/resume.github.com: Resumes generated using the GitHub informations
Skip to content
Resumes generated using the GitHub informations
JavaScript HTML CSS Ruby
Switch branches/tags
Nothing to show
Latest commit f599075 Aug 5, 2016
u2 committed Aug 5, 2016 Merge pull request #237 from bardiharborow/patch-1
Rewrite and cleanup README.

README.markdown

GitHub Résumé

A service that creates a résumé based on your GitHub repos/activity.

GitHub Résumé is opt-in. To make your resume visible, just star this project. To view your résumé, go to https://resume.github.io/?yourusername or follow the instructions on the home page.

Great for all the tech-savy bosses who want to have a quick view of person's git/github activity, before the interview.

Development

To run the app in development mode:

$ rackup config.ru

(You must have Ruby and the rack gem installed.)

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - rg3/youtube-dl: Command-line program to download videos from YouTube.com and other video sites
Skip to content
Command-line program to download videos from YouTube.com and other video sites
Python Other
Latest commit 3d977fe Feb 22, 2018

README.md

Build Status

youtube-dl - download videos from youtube.com or other video platforms

INSTALLATION

To install it right away for all UNIX users (Linux, OS X, etc.), type:

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

If you do not have curl, you can alternatively use a recent wget:

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

Windows users can download an .exe file and place it in any location on their PATH except for %SYSTEMROOT%\System32 (e.g. do not put in C:\Windows\System32).

You can also use pip:

sudo -H pip install --upgrade youtube-dl

This command will update youtube-dl if you have already installed it. See the pypi page for more information.

OS X users can install youtube-dl with Homebrew:

brew install youtube-dl

Or with MacPorts:

sudo port install youtube-dl

Alternatively, refer to the developer instructions for how to check out and work with the git repository. For further options, including PGP signatures, see the youtube-dl Download Page.

DESCRIPTION

youtube-dl is a command-line program to download videos from YouTube.com and a few more sites. It requires the Python interpreter, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work on your Unix box, on Windows or on macOS. It is released to the public domain, which means you can modify it, redistribute it or use it however you like.

youtube-dl [OPTIONS] URL [URL...]

OPTIONS

-h, --help                       Print this help text and exit
--version                        Print program version and exit
-U, --update                     Update this program to latest version. Make
                                 sure that you have sufficient permissions
                                 (run with sudo if needed)
-i, --ignore-errors              Continue on download errors, for example to
                                 skip unavailable videos in a playlist
--abort-on-error                 Abort downloading of further videos (in the
                                 playlist or the command line) if an error
                                 occurs
--dump-user-agent                Display the current browser identification
--list-extractors                List all supported extractors
--extractor-descriptions         Output descriptions of all supported
                                 extractors
--force-generic-extractor        Force extraction to use the generic
                                 extractor
--default-search PREFIX          Use this prefix for unqualified URLs. For
                                 example "gvsearch2:" downloads two videos
                                 from google videos for youtube-dl "large
                                 apple". Use the value "auto" to let
                                 youtube-dl guess ("auto_warning" to emit a
                                 warning when guessing). "error" just throws
                                 an error. The default value "fixup_error"
                                 repairs broken URLs, but emits an error if
                                 this is not possible instead of searching.
--ignore-config                  Do not read configuration files. When given
                                 in the global configuration file
                                 /etc/youtube-dl.conf: Do not read the user
                                 configuration in ~/.config/youtube-
                                 dl/config (%APPDATA%/youtube-dl/config.txt
                                 on Windows)
--config-location PATH           Location of the configuration file; either
                                 the path to the config or its containing
                                 directory.
--flat-playlist                  Do not extract the videos of a playlist,
                                 only list them.
--mark-watched                   Mark videos watched (YouTube only)
--no-mark-watched                Do not mark videos watched (YouTube only)
--no-color                       Do not emit color codes in output

Network Options:

--proxy URL                      Use the specified HTTP/HTTPS/SOCKS proxy.
                                 To enable experimental SOCKS proxy, specify
                                 a proper scheme. For example
                                 socks5://127.0.0.1:1080/. Pass in an empty
                                 string (--proxy "") for direct connection
--socket-timeout SECONDS         Time to wait before giving up, in seconds
--source-address IP              Client-side IP address to bind to
-4, --force-ipv4                 Make all connections via IPv4
-6, --force-ipv6                 Make all connections via IPv6

Geo Restriction:

--geo-verification-proxy URL     Use this proxy to verify the IP address for
                                 some geo-restricted sites. The default
                                 proxy specified by --proxy (or none, if the
                                 options is not present) is used for the
                                 actual downloading.
--geo-bypass                     Bypass geographic restriction via faking
                                 X-Forwarded-For HTTP header (experimental)
--no-geo-bypass                  Do not bypass geographic restriction via
                                 faking X-Forwarded-For HTTP header
                                 (experimental)
--geo-bypass-country CODE        Force bypass geographic restriction with
                                 explicitly provided two-letter ISO 3166-2
                                 country code (experimental)

Video Selection:

--playlist-start NUMBER          Playlist video to start at (default is 1)
--playlist-end NUMBER            Playlist video to end at (default is last)
--playlist-items ITEM_SPEC       Playlist video items to download. Specify
                                 indices of the videos in the playlist
                                 separated by commas like: "--playlist-items
                                 1,2,5,8" if you want to download videos
                                 indexed 1, 2, 5, 8 in the playlist. You can
                                 specify range: "--playlist-items
                                 1-3,7,10-13", it will download the videos
                                 at index 1, 2, 3, 7, 10, 11, 12 and 13.
--match-title REGEX              Download only matching titles (regex or
                                 caseless sub-string)
--reject-title REGEX             Skip download for matching titles (regex or
                                 caseless sub-string)
--max-downloads NUMBER           Abort after downloading NUMBER files
--min-filesize SIZE              Do not download any videos smaller than
                                 SIZE (e.g. 50k or 44.6m)
--max-filesize SIZE              Do not download any videos larger than SIZE
                                 (e.g. 50k or 44.6m)
--date DATE                      Download only videos uploaded in this date
--datebefore DATE                Download only videos uploaded on or before
                                 this date (i.e. inclusive)
--dateafter DATE                 Download only videos uploaded on or after
                                 this date (i.e. inclusive)
--min-views COUNT                Do not download any videos with less than
                                 COUNT views
--max-views COUNT                Do not download any videos with more than
                                 COUNT views
--match-filter FILTER            Generic video filter. Specify any key (see
                                 the "OUTPUT TEMPLATE" for a list of
                                 available keys) to match if the key is
                                 present, !key to check if the key is not
                                 present, key > NUMBER (like "comment_count
                                 > 12", also works with >=, <, <=, !=, =) to
                                 compare against a number, key = 'LITERAL'
                                 (like "uploader = 'Mike Smith'", also works
                                 with !=) to match against a string literal
                                 and & to require multiple matches. Values
                                 which are not known are excluded unless you
                                 put a question mark (?) after the operator.
                                 For example, to only match videos that have
                                 been liked more than 100 times and disliked
                                 less than 50 times (or the dislike
                                 functionality is not available at the given
                                 service), but who also have a description,
                                 use --match-filter "like_count > 100 &
                                 dislike_count <? 50 & description" .
--no-playlist                    Download only the video, if the URL refers
                                 to a video and a playlist.
--yes-playlist                   Download the playlist, if the URL refers to
                                 a video and a playlist.
--age-limit YEARS                Download only videos suitable for the given
                                 age
--download-archive FILE          Download only videos not listed in the
                                 archive file. Record the IDs of all
                                 downloaded videos in it.
--include-ads                    Download advertisements as well
                                 (experimental)

Download Options:

-r, --limit-rate RATE            Maximum download rate in bytes per second
                                 (e.g. 50K or 4.2M)
-R, --retries RETRIES            Number of retries (default is 10), or
                                 "infinite".
--fragment-retries RETRIES       Number of retries for a fragment (default
                                 is 10), or "infinite" (DASH, hlsnative and
                                 ISM)
--skip-unavailable-fragments     Skip unavailable fragments (DASH, hlsnative
                                 and ISM)
--abort-on-unavailable-fragment  Abort downloading when some fragment is not
                                 available
--keep-fragments                 Keep downloaded fragments on disk after
                                 downloading is finished; fragments are
                                 erased by default
--buffer-size SIZE               Size of download buffer (e.g. 1024 or 16K)
                                 (default is 1024)
--no-resize-buffer               Do not automatically adjust the buffer
                                 size. By default, the buffer size is
                                 automatically resized from an initial value
                                 of SIZE.
--http-chunk-size SIZE           Size of a chunk for chunk-based HTTP
                                 downloading (e.g. 10485760 or 10M) (default
                                 is disabled). May be useful for bypassing
                                 bandwidth throttling imposed by a webserver
                                 (experimental)
--playlist-reverse               Download playlist videos in reverse order
--playlist-random                Download playlist videos in random order
--xattr-set-filesize             Set file xattribute ytdl.filesize with
                                 expected file size (experimental)
--hls-prefer-native              Use the native HLS downloader instead of
                                 ffmpeg
--hls-prefer-ffmpeg              Use ffmpeg instead of the native HLS
                                 downloader
--hls-use-mpegts                 Use the mpegts container for HLS videos,
                                 allowing to play the video while
                                 downloading (some players may not be able
                                 to play it)
--external-downloader COMMAND    Use the specified external downloader.
                                 Currently supports
                                 aria2c,avconv,axel,curl,ffmpeg,httpie,wget
--external-downloader-args ARGS  Give these arguments to the external
                                 downloader

Filesystem Options:

-a, --batch-file FILE            File containing URLs to download ('-' for
                                 stdin)
--id                             Use only video ID in file name
-o, --output TEMPLATE            Output filename template, see the "OUTPUT
                                 TEMPLATE" for all the info
--autonumber-start NUMBER        Specify the start value for %(autonumber)s
                                 (default is 1)
--restrict-filenames             Restrict filenames to only ASCII
                                 characters, and avoid "&" and spaces in
                                 filenames
-w, --no-overwrites              Do not overwrite files
-c, --continue                   Force resume of partially downloaded files.
                                 By default, youtube-dl will resume
                                 downloads if possible.
--no-continue                    Do not resume partially downloaded files
                                 (restart from beginning)
--no-part                        Do not use .part files - write directly
                                 into output file
--no-mtime                       Do not use the Last-modified header to set
                                 the file modification time
--write-description              Write video description to a .description
                                 file
--write-info-json                Write video metadata to a .info.json file
--write-annotations              Write video annotations to a
                                 .annotations.xml file
--load-info-json FILE            JSON file containing the video information
                                 (created with the "--write-info-json"
                                 option)
--cookies FILE                   File to read cookies from and dump cookie
                                 jar in
--cache-dir DIR                  Location in the filesystem where youtube-dl
                                 can store some downloaded information
                                 permanently. By default
                                 $XDG_CACHE_HOME/youtube-dl or
                                 ~/.cache/youtube-dl . At the moment, only
                                 YouTube player files (for videos with
                                 obfuscated signatures) are cached, but that
                                 may change.
--no-cache-dir                   Disable filesystem caching
--rm-cache-dir                   Delete all filesystem cache files

Thumbnail images:

--write-thumbnail                Write thumbnail image to disk
--write-all-thumbnails           Write all thumbnail image formats to disk
--list-thumbnails                Simulate and list all available thumbnail
                                 formats

Verbosity / Simulation Options:

-q, --quiet                      Activate quiet mode
--no-warnings                    Ignore warnings
-s, --simulate                   Do not download the video and do not write
                                 anything to disk
--skip-download                  Do not download the video
-g, --get-url                    Simulate, quiet but print URL
-e, --get-title                  Simulate, quiet but print title
--get-id                         Simulate, quiet but print id
--get-thumbnail                  Simulate, quiet but print thumbnail URL
--get-description                Simulate, quiet but print video description
--get-duration                   Simulate, quiet but print video length
--get-filename                   Simulate, quiet but print output filename
--get-format                     Simulate, quiet but print output format
-j, --dump-json                  Simulate, quiet but print JSON information.
                                 See the "OUTPUT TEMPLATE" for a description
                                 of available keys.
-J, --dump-single-json           Simulate, quiet but print JSON information
                                 for each command-line argument. If the URL
                                 refers to a playlist, dump the whole
                                 playlist information in a single line.
--print-json                     Be quiet and print the video information as
                                 JSON (video is still being downloaded).
--newline                        Output progress bar as new lines
--no-progress                    Do not print progress bar
--console-title                  Display progress in console titlebar
-v, --verbose                    Print various debugging information
--dump-pages                     Print downloaded pages encoded using base64
                                 to debug problems (very verbose)
--write-pages                    Write downloaded intermediary pages to
                                 files in the current directory to debug
                                 problems
--print-traffic                  Display sent and read HTTP traffic
-C, --call-home                  Contact the youtube-dl server for debugging
--no-call-home                   Do NOT contact the youtube-dl server for
                                 debugging

Workarounds:

--encoding ENCODING              Force the specified encoding (experimental)
--no-check-certificate           Suppress HTTPS certificate validation
--prefer-insecure                Use an unencrypted connection to retrieve
                                 information whenever possible
--user-agent UA                  Specify a custom user agent
--referer URL                    Specify a custom referer, use if the video
                                 access is restricted to one domain
--add-header FIELD:VALUE         Specify a custom HTTP header and its value,
                                 separated by a colon ':'. You can use this
                                 option multiple times
--bidi-workaround                Work around terminals that lack
                                 bidirectional text support. Requires bidiv
                                 or fribidi executable in PATH
--sleep-interval SECONDS         Number of seconds to sleep before each
                                 download when used alone or a lower bound
                                 of a range for randomized sleep before each
                                 download (minimum possible number of
                                 seconds to sleep) when used along with
                                 --max-sleep-interval.
--max-sleep-interval SECONDS     Upper bound of a range for randomized sleep
                                 before each download (maximum possible
                                 number of seconds to sleep). Must only be
                                 used along with --min-sleep-interval.

Video Format Options:

-f, --format FORMAT              Video format code, see the "FORMAT
                                 SELECTION" for all the info
--all-formats                    Download all available video formats
--prefer-free-formats            Prefer free video formats unless a specific
                                 one is requested
-F, --list-formats               List all available formats of requested
                                 videos
--youtube-skip-dash-manifest     Do not download the DASH manifests and
                                 related data on YouTube videos
--merge-output-format FORMAT     If a merge is required (e.g.
                                 bestvideo+bestaudio), output to given
                                 container format. One of mkv, mp4, ogg,
                                 webm, flv. Ignored if no merge is required

Subtitle Options:

--write-sub                      Write subtitle file
--write-auto-sub                 Write automatically generated subtitle file
                                 (YouTube only)
--all-subs                       Download all the available subtitles of the
                                 video
--list-subs                      List all available subtitles for the video
--sub-format FORMAT              Subtitle format, accepts formats
                                 preference, for example: "srt" or
                                 "ass/srt/best"
--sub-lang LANGS                 Languages of the subtitles to download
                                 (optional) separated by commas, use --list-
                                 subs for available language tags

Authentication Options:

-u, --username USERNAME          Login with this account ID
-p, --password PASSWORD          Account password. If this option is left
                                 out, youtube-dl will ask interactively.
-2, --twofactor TWOFACTOR        Two-factor authentication code
-n, --netrc                      Use .netrc authentication data
--video-password PASSWORD        Video password (vimeo, smotri, youku)

Adobe Pass Options:

--ap-mso MSO                     Adobe Pass multiple-system operator (TV
                                 provider) identifier, use --ap-list-mso for
                                 a list of available MSOs
--ap-username USERNAME           Multiple-system operator account login
--ap-password PASSWORD           Multiple-system operator account password.
                                 If this option is left out, youtube-dl will
                                 ask interactively.
--ap-list-mso                    List all supported multiple-system
                                 operators

Post-processing Options:

-x, --extract-audio              Convert video files to audio-only files
                                 (requires ffmpeg or avconv and ffprobe or
                                 avprobe)
--audio-format FORMAT            Specify audio format: "best", "aac",
                                 "flac", "mp3", "m4a", "opus", "vorbis", or
                                 "wav"; "best" by default; No effect without
                                 -x
--audio-quality QUALITY          Specify ffmpeg/avconv audio quality, insert
                                 a value between 0 (better) and 9 (worse)
                                 for VBR or a specific bitrate like 128K
                                 (default 5)
--recode-video FORMAT            Encode the video to another format if
                                 necessary (currently supported:
                                 mp4|flv|ogg|webm|mkv|avi)
--postprocessor-args ARGS        Give these arguments to the postprocessor
-k, --keep-video                 Keep the video file on disk after the post-
                                 processing; the video is erased by default
--no-post-overwrites             Do not overwrite post-processed files; the
                                 post-processed files are overwritten by
                                 default
--embed-subs                     Embed subtitles in the video (only for mp4,
                                 webm and mkv videos)
--embed-thumbnail                Embed thumbnail in the audio as cover art
--add-metadata                   Write metadata to the video file
--metadata-from-title FORMAT     Parse additional metadata like song title /
                                 artist from the video title. The format
                                 syntax is the same as --output. Regular
                                 expression with named capture groups may
                                 also be used. The parsed parameters replace
                                 existing values. Example: --metadata-from-
                                 title "%(artist)s - %(title)s" matches a
                                 title like "Coldplay - Paradise". Example
                                 (regex): --metadata-from-title
                                 "(?P<artist>.+?) - (?P<title>.+)"
--xattrs                         Write metadata to the video file's xattrs
                                 (using dublin core and xdg standards)
--fixup POLICY                   Automatically correct known faults of the
                                 file. One of never (do nothing), warn (only
                                 emit a warning), detect_or_warn (the
                                 default; fix file if we can, warn
                                 otherwise)
--prefer-avconv                  Prefer avconv over ffmpeg for running the
                                 postprocessors (default)
--prefer-ffmpeg                  Prefer ffmpeg over avconv for running the
                                 postprocessors
--ffmpeg-location PATH           Location of the ffmpeg/avconv binary;
                                 either the path to the binary or its
                                 containing directory.
--exec CMD                       Execute a command on the file after
                                 downloading, similar to find's -exec
                                 syntax. Example: --exec 'adb push {}
                                 /sdcard/Music/ && rm {}'
--convert-subs FORMAT            Convert the subtitles to other format
                                 (currently supported: srt|ass|vtt|lrc)

CONFIGURATION

You can configure youtube-dl by placing any supported command line option to a configuration file. On Linux and OS X, the system wide configuration file is located at /etc/youtube-dl.conf and the user wide configuration file at ~/.config/youtube-dl/config. On Windows, the user wide configuration file locations are %APPDATA%\youtube-dl\config.txt or C:\Users\<user name>\youtube-dl.conf. Note that by default configuration file may not exist so you may need to create it yourself.

For example, with the following configuration file youtube-dl will always extract the audio, not copy the mtime, use a proxy and save all videos under Movies directory in your home directory:

# Lines starting with # are comments

# Always extract audio
-x

# Do not copy the mtime
--no-mtime

# Use this proxy
--proxy 127.0.0.1:3128

# Save all videos under Movies directory in your home directory
-o ~/Movies/%(title)s.%(ext)s

Note that options in configuration file are just the same options aka switches used in regular command line calls thus there must be no whitespace after - or --, e.g. -o or --proxy but not - o or -- proxy.

You can use --ignore-config if you want to disable the configuration file for a particular youtube-dl run.

You can also use --config-location if you want to use custom configuration file for a particular youtube-dl run.

Authentication with .netrc file

You may also want to configure automatic credentials storage for extractors that support authentication (by providing login and password with --username and --password) in order not to pass credentials as command line arguments on every youtube-dl execution and prevent tracking plain text passwords in the shell command history. You can achieve this using a .netrc file on a per extractor basis. For that you will need to create a .netrc file in your $HOME and restrict permissions to read/write by only you:

touch $HOME/.netrc
chmod a-rwx,u+rw $HOME/.netrc

After that you can add credentials for an extractor in the following format, where extractor is the name of the extractor in lowercase:

machine <extractor> login <login> password <password>

For example:

machine youtube login myaccount@gmail.com password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password

To activate authentication with the .netrc file you should pass --netrc to youtube-dl or place it in the configuration file.

On Windows you may also need to setup the %HOME% environment variable manually. For example:

set HOME=%USERPROFILE%

OUTPUT TEMPLATE

The -o option allows users to indicate a template for the output file names.

tl;dr: navigate me to examples.

The basic usage is not to set any template arguments when downloading a single file, like in youtube-dl -o funny_video.flv "https://some/video". However, it may contain special sequences that will be replaced when downloading each video. The special sequences may be formatted according to python string formatting operations. For example, %(NAME)s or %(NAME)05d. To clarify, that is a percent symbol followed by a name in parentheses, followed by a formatting operations. Allowed names along with sequence type are:

  • id (string): Video identifier
  • title (string): Video title
  • url (string): Video URL
  • ext (string): Video filename extension
  • alt_title (string): A secondary title of the video
  • display_id (string): An alternative identifier for the video
  • uploader (string): Full name of the video uploader
  • license (string): License name the video is licensed under
  • creator (string): The creator of the video
  • release_date (string): The date (YYYYMMDD) when the video was released
  • timestamp (numeric): UNIX timestamp of the moment the video became available
  • upload_date (string): Video upload date (YYYYMMDD)
  • uploader_id (string): Nickname or id of the video uploader
  • location (string): Physical location where the video was filmed
  • duration (numeric): Length of the video in seconds
  • view_count (numeric): How many users have watched the video on the platform
  • like_count (numeric): Number of positive ratings of the video
  • dislike_count (numeric): Number of negative ratings of the video
  • repost_count (numeric): Number of reposts of the video
  • average_rating (numeric): Average rating give by users, the scale used depends on the webpage
  • comment_count (numeric): Number of comments on the video
  • age_limit (numeric): Age restriction for the video (years)
  • is_live (boolean): Whether this video is a live stream or a fixed-length video
  • start_time (numeric): Time in seconds where the reproduction should start, as specified in the URL
  • end_time (numeric): Time in seconds where the reproduction should end, as specified in the URL
  • format (string): A human-readable description of the format
  • format_id (string): Format code specified by --format
  • format_note (string): Additional info about the format
  • width (numeric): Width of the video
  • height (numeric): Height of the video
  • resolution (string): Textual description of width and height
  • tbr (numeric): Average bitrate of audio and video in KBit/s
  • abr (numeric): Average audio bitrate in KBit/s
  • acodec (string): Name of the audio codec in use
  • asr (numeric): Audio sampling rate in Hertz
  • vbr (numeric): Average video bitrate in KBit/s
  • fps (numeric): Frame rate
  • vcodec (string): Name of the video codec in use
  • container (string): Name of the container format
  • filesize (numeric): The number of bytes, if known in advance
  • filesize_approx (numeric): An estimate for the number of bytes
  • protocol (string): The protocol that will be used for the actual download
  • extractor (string): Name of the extractor
  • extractor_key (string): Key name of the extractor
  • epoch (numeric): Unix epoch when creating the file
  • autonumber (numeric): Five-digit number that will be increased with each download, starting at zero
  • playlist (string): Name or id of the playlist that contains the video
  • playlist_index (numeric): Index of the video in the playlist padded with leading zeros according to the total length of the playlist
  • playlist_id (string): Playlist identifier
  • playlist_title (string): Playlist title
  • playlist_uploader (string): Full name of the playlist uploader
  • playlist_uploader_id (string): Nickname or id of the playlist uploader

Available for the video that belongs to some logical chapter or section:

  • chapter (string): Name or title of the chapter the video belongs to
  • chapter_number (numeric): Number of the chapter the video belongs to
  • chapter_id (string): Id of the chapter the video belongs to

Available for the video that is an episode of some series or programme:

  • series (string): Title of the series or programme the video episode belongs to
  • season (string): Title of the season the video episode belongs to
  • season_number (numeric): Number of the season the video episode belongs to
  • season_id (string): Id of the season the video episode belongs to
  • episode (string): Title of the video episode
  • episode_number (numeric): Number of the video episode within a season
  • episode_id (string): Id of the video episode

Available for the media that is a track or a part of a music album:

  • track (string): Title of the track
  • track_number (numeric): Number of the track within an album or a disc
  • track_id (string): Id of the track
  • artist (string): Artist(s) of the track
  • genre (string): Genre(s) of the track
  • album (string): Title of the album the track belongs to
  • album_type (string): Type of the album
  • album_artist (string): List of all artists appeared on the album
  • disc_number (numeric): Number of the disc or other physical medium the track belongs to
  • release_year (numeric): Year (YYYY) when the album was released

Each aforementioned sequence when referenced in an output template will be replaced by the actual value corresponding to the sequence name. Note that some of the sequences are not guaranteed to be present since they depend on the metadata obtained by a particular extractor. Such sequences will be replaced with NA.

For example for -o %(title)s-%(id)s.%(ext)s and an mp4 video with title youtube-dl test video and id BaW_jenozKcj, this will result in a youtube-dl test video-BaW_jenozKcj.mp4 file created in the current directory.

For numeric sequences you can use numeric related formatting, for example, %(view_count)05d will result in a string with view count padded with zeros up to 5 characters, like in 00042.

Output templates can also contain arbitrary hierarchical path, e.g. -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' which will result in downloading each video in a directory corresponding to this path template. Any missing directory will be automatically created for you.

To use percent literals in an output template use %%. To output to stdout use -o -.

The current default template is %(title)s-%(id)s.%(ext)s.

In some cases, you don't want special characters such as 中, spaces, or &, such as when transferring the downloaded filename to a Windows system or the filename through an 8bit-unsafe channel. In these cases, add the --restrict-filenames flag to get a shorter title:

Output template and Windows batch files

If you are using an output template inside a Windows batch file then you must escape plain percent characters (%) by doubling, so that -o "%(title)s-%(id)s.%(ext)s" should become -o "%%(title)s-%%(id)s.%%(ext)s". However you should not touch %'s that are not plain characters, e.g. environment variables for expansion should stay intact: -o "C:\%HOMEPATH%\Desktop\%%(title)s.%%(ext)s".

Output template examples

Note that on Windows you may need to use double quotes instead of single.

$ youtube-dl --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc
youtube-dl test video ''_ä↭𝕐.mp4    # All kinds of weird characters

$ youtube-dl --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc --restrict-filenames
youtube-dl_test_video_.mp4          # A simple file name

# Download YouTube playlist videos in separate directory indexed by video order in a playlist
$ youtube-dl -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re

# Download all playlists of YouTube channel/user keeping each playlist in separate directory:
$ youtube-dl -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/user/TheLinuxFoundation/playlists

# Download Udemy course keeping each chapter in separate directory under MyVideos directory in your home
$ youtube-dl -u user -p password -o '~/MyVideos/%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s' https://www.udemy.com/java-tutorial/

# Download entire series season keeping each series and each season in separate directory under C:/MyVideos
$ youtube-dl -o "C:/MyVideos/%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" https://videomore.ru/kino_v_detalayah/5_sezon/367617

# Stream the video being downloaded to stdout
$ youtube-dl -o - BaW_jenozKc

FORMAT SELECTION

By default youtube-dl tries to download the best available quality, i.e. if you want the best quality you don't need to pass any special options, youtube-dl will guess it for you by default.

But sometimes you may want to download in a different format, for example when you are on a slow or intermittent connection. The key mechanism for achieving this is so-called format selection based on which you can explicitly specify desired format, select formats based on some criterion or criteria, setup precedence and much more.

The general syntax for format selection is --format FORMAT or shorter -f FORMAT where FORMAT is a selector expression, i.e. an expression that describes format or formats you would like to download.

tl;dr: navigate me to examples.

The simplest case is requesting a specific format, for example with -f 22 you can download the format with format code equal to 22. You can get the list of available format codes for particular video using --list-formats or -F. Note that these format codes are extractor specific.

You can also use a file extension (currently 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm are supported) to download the best quality format of a particular file extension served as a single file, e.g. -f webm will download the best quality format with the webm extension served as a single file.

You can also use special names to select particular edge case formats:

  • best: Select the best quality format represented by a single file with video and audio.
  • worst: Select the worst quality format represented by a single file with video and audio.
  • bestvideo: Select the best quality video-only format (e.g. DASH video). May not be available.
  • worstvideo: Select the worst quality video-only format. May not be available.
  • bestaudio: Select the best quality audio only-format. May not be available.
  • worstaudio: Select the worst quality audio only-format. May not be available.

For example, to download the worst quality video-only format you can use -f worstvideo.

If you want to download multiple videos and they don't have the same formats available, you can specify the order of preference using slashes. Note that slash is left-associative, i.e. formats on the left hand side are preferred, for example -f 22/17/18 will download format 22 if it's available, otherwise it will download format 17 if it's available, otherwise it will download format 18 if it's available, otherwise it will complain that no suitable formats are available for download.

If you want to download several formats of the same video use a comma as a separator, e.g. -f 22,17,18 will download all these three formats, of course if they are available. Or a more sophisticated example combined with the precedence feature: -f 136/137/mp4/bestvideo,140/m4a/bestaudio.

You can also filter the video formats by putting a condition in brackets, as in -f "best[height=720]" (or -f "[filesize>10M]").

The following numeric meta fields can be used with comparisons <, <=, >, >=, = (equals), != (not equals):

  • filesize: The number of bytes, if known in advance
  • width: Width of the video, if known
  • height: Height of the video, if known
  • tbr: Average bitrate of audio and video in KBit/s
  • abr: Average audio bitrate in KBit/s
  • vbr: Average video bitrate in KBit/s
  • asr: Audio sampling rate in Hertz
  • fps: Frame rate

Also filtering work for comparisons = (equals), != (not equals), ^= (begins with), $= (ends with), *= (contains) and following string meta fields:

  • ext: File extension
  • acodec: Name of the audio codec in use
  • vcodec: Name of the video codec in use
  • container: Name of the container format
  • protocol: The protocol that will be used for the actual download, lower-case (http, https, rtsp, rtmp, rtmpe, mms, f4m, ism, http_dash_segments, m3u8, or m3u8_native)
  • format_id: A short description of the format

Note that none of the aforementioned meta fields are guaranteed to be present since this solely depends on the metadata obtained by particular extractor, i.e. the metadata offered by the video hoster.

Formats for which the value is not known are excluded unless you put a question mark (?) after the operator. You can combine format filters, so -f "[height <=? 720][tbr>500]" selects up to 720p videos (or videos where the height is not known) with a bitrate of at least 500 KBit/s.

You can merge the video and audio of two formats into a single file using -f <video-format>+<audio-format> (requires ffmpeg or avconv installed), for example -f bestvideo+bestaudio will download the best video-only format, the best audio-only format and mux them together with ffmpeg/avconv.

Format selectors can also be grouped using parentheses, for example if you want to download the best mp4 and webm formats with a height lower than 480 you can use -f '(mp4,webm)[height<480]'.

Since the end of April 2015 and version 2015.04.26, youtube-dl uses -f bestvideo+bestaudio/best as the default format selection (see #5447, #5456). If ffmpeg or avconv are installed this results in downloading bestvideo and bestaudio separately and muxing them together into a single file giving the best overall quality available. Otherwise it falls back to best and results in downloading the best available quality served as a single file. best is also needed for videos that don't come from YouTube because they don't provide the audio and video in two different files. If you want to only download some DASH formats (for example if you are not interested in getting videos with a resolution higher than 1080p), you can add -f bestvideo[height<=?1080]+bestaudio/best to your configuration file. Note that if you use youtube-dl to stream to stdout (and most likely to pipe it to your media player then), i.e. you explicitly specify output template as -o -, youtube-dl still uses -f best format selection in order to start content delivery immediately to your player and not to wait until bestvideo and bestaudio are downloaded and muxed.

If you want to preserve the old format selection behavior (prior to youtube-dl 2015.04.26), i.e. you want to download the best available quality media served as a single file, you should explicitly specify your choice with -f best. You may want to add it to the configuration file in order not to type it every time you run youtube-dl.

Format selection examples

Note that on Windows you may need to use double quotes instead of single.

# Download best mp4 format available or any other best if no mp4 available
$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

# Download best format available but not better that 480p
$ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]'

# Download best video only format but no bigger than 50 MB
$ youtube-dl -f 'best[filesize<50M]'

# Download best format available via direct link over HTTP/HTTPS protocol
$ youtube-dl -f '(bestvideo+bestaudio/best)[protocol^=http]'

# Download the best video format and the best audio format without merging them
$ youtube-dl -f 'bestvideo,bestaudio' -o '%(title)s.f%(format_id)s.%(ext)s'

Note that in the last example, an output template is recommended as bestvideo and bestaudio may have the same file name.

VIDEO SELECTION

Videos can be filtered by their upload date using the options --date, --datebefore or --dateafter. They accept dates in two formats:

  • Absolute dates: Dates in the format YYYYMMDD.
  • Relative dates: Dates in the format (now|today)[+-][0-9](day|week|month|year)(s)?

Examples:

# Download only the videos uploaded in the last 6 months
$ youtube-dl --dateafter now-6months

# Download only the videos uploaded on January 1, 1970
$ youtube-dl --date 19700101

$ # Download only the videos uploaded in the 200x decade
$ youtube-dl --dateafter 20000101 --datebefore 20091231

FAQ

How do I update youtube-dl?

If you've followed our manual installation instructions, you can simply run youtube-dl -U (or, on Linux, sudo youtube-dl -U).

If you have used pip, a simple sudo pip install -U youtube-dl is sufficient to update.

If you have installed youtube-dl using a package manager like apt-get or yum, use the standard system update mechanism to update. Note that distribution packages are often outdated. As a rule of thumb, youtube-dl releases at least once a month, and often weekly or even daily. Simply go to https://yt-dl.org to find out the current version. Unfortunately, there is nothing we youtube-dl developers can do if your distribution serves a really outdated version. You can (and should) complain to your distribution in their bugtracker or support forum.

As a last resort, you can also uninstall the version installed by your package manager and follow our manual installation instructions. For that, remove the distribution's package, with a line like

sudo apt-get remove -y youtube-dl

Afterwards, simply follow our manual installation instructions:

sudo wget https://yt-dl.org/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+x /usr/local/bin/youtube-dl
hash -r

Again, from then on you'll be able to update with sudo youtube-dl -U.

youtube-dl is extremely slow to start on Windows

Add a file exclusion for youtube-dl.exe in Windows Defender settings.

I'm getting an error Unable to extract OpenGraph title on YouTube playlists

YouTube changed their playlist format in March 2014 and later on, so you'll need at least youtube-dl 2014.07.25 to download all YouTube videos.

If you have installed youtube-dl with a package manager, pip, setup.py or a tarball, please use that to update. Note that Ubuntu packages do not seem to get updated anymore. Since we are not affiliated with Ubuntu, there is little we can do. Feel free to report bugs to the Ubuntu packaging people - all they have to do is update the package to a somewhat recent version. See above for a way to update.

I'm getting an error when trying to use output template: error: using output template conflicts with using title, video ID or auto number

Make sure you are not using -o with any of these options -t, --title, --id, -A or --auto-number set in command line or in a configuration file. Remove the latter if any.

Do I always have to pass -citw?

By default, youtube-dl intends to have the best options (incidentally, if you have a convincing case that these should be different, please file an issue where you explain that). Therefore, it is unnecessary and sometimes harmful to copy long option strings from webpages. In particular, the only option out of -citw that is regularly useful is -i.

Can you please put the -b option back?

Most people asking this question are not aware that youtube-dl now defaults to downloading the highest available quality as reported by YouTube, which will be 1080p or 720p in some cases, so you no longer need the -b option. For some specific videos, maybe YouTube does not report them to be available in a specific high quality format you're interested in. In that case, simply request it with the -f option and youtube-dl will try to download it.

I get HTTP error 402 when trying to download a video. What's this?

Apparently YouTube requires you to pass a CAPTCHA test if you download too much. We're considering to provide a way to let you solve the CAPTCHA, but at the moment, your best course of action is pointing a web browser to the youtube URL, solving the CAPTCHA, and restart youtube-dl.

Do I need any other programs?

youtube-dl works fine on its own on most sites. However, if you want to convert video/audio, you'll need avconv or ffmpeg. On some sites - most notably YouTube - videos can be retrieved in a higher quality format without sound. youtube-dl will detect whether avconv/ffmpeg is present and automatically pick the best option.

Videos or video formats streamed via RTMP protocol can only be downloaded when rtmpdump is installed. Downloading MMS and RTSP videos requires either mplayer or mpv to be installed.

I have downloaded a video but how can I play it?

Once the video is fully downloaded, use any video player, such as mpv, vlc or mplayer.

I extracted a video URL with -g, but it does not play on another machine / in my web browser.

It depends a lot on the service. In many cases, requests for the video (to download/play it) must come from the same IP address and with the same cookies and/or HTTP headers. Use the --cookies option to write the required cookies into a file, and advise your downloader to read cookies from that file. Some sites also require a common user agent to be used, use --dump-user-agent to see the one in use by youtube-dl. You can also get necessary cookies and HTTP headers from JSON output obtained with --dump-json.

It may be beneficial to use IPv6; in some cases, the restrictions are only applied to IPv4. Some services (sometimes only for a subset of videos) do not restrict the video URL by IP address, cookie, or user-agent, but these are the exception rather than the rule.

Please bear in mind that some URL protocols are not supported by browsers out of the box, including RTMP. If you are using -g, your own downloader must support these as well.

If you want to play the video on a machine that is not running youtube-dl, you can relay the video content from the machine that runs youtube-dl. You can use -o - to let youtube-dl stream a video to stdout, or simply allow the player to download the files written by youtube-dl in turn.

ERROR: no fmt_url_map or conn information found in video info

YouTube has switched to a new video info format in July 2011 which is not supported by old versions of youtube-dl. See above for how to update youtube-dl.

ERROR: unable to download video

YouTube requires an additional signature since September 2012 which is not supported by old versions of youtube-dl. See above for how to update youtube-dl.

Video URL contains an ampersand and I'm getting some strange output [1] 2839 or 'v' is not recognized as an internal or external command

That's actually the output from your shell. Since ampersand is one of the special shell characters it's interpreted by the shell preventing you from passing the whole URL to youtube-dl. To disable your shell from interpreting the ampersands (or any other special characters) you have to either put the whole URL in quotes or escape them with a backslash (which approach will work depends on your shell).

For example if your URL is https://www.youtube.com/watch?t=4&v=BaW_jenozKc you should end up with following command:

youtube-dl 'https://www.youtube.com/watch?t=4&v=BaW_jenozKc'

or

youtube-dl https://www.youtube.com/watch?t=4\&v=BaW_jenozKc

For Windows you have to use the double quotes:

youtube-dl "https://www.youtube.com/watch?t=4&v=BaW_jenozKc"

ExtractorError: Could not find JS function u'OF'

In February 2015, the new YouTube player contained a character sequence in a string that was misinterpreted by old versions of youtube-dl. See above for how to update youtube-dl.

HTTP Error 429: Too Many Requests or 402: Payment Required

These two error codes indicate that the service is blocking your IP address because of overuse. Contact the service and ask them to unblock your IP address, or - if you have acquired a whitelisted IP address already - use the --proxy or --source-address options to select another IP address.

SyntaxError: Non-ASCII character

The error

File "youtube-dl", line 2
SyntaxError: Non-ASCII character '\x93' ...

means you're using an outdated version of Python. Please update to Python 2.6 or 2.7.

What is this binary file? Where has the code gone?

Since June 2012 (#342) youtube-dl is packed as an executable zipfile, simply unzip it (might need renaming to youtube-dl.zip first on some systems) or clone the git repository, as laid out above. If you modify the code, you can run it by executing the __main__.py file. To recompile the executable, run make youtube-dl.

The exe throws an error due to missing MSVCR100.dll

To run the exe you need to install first the Microsoft Visual C++ 2010 Redistributable Package (x86).

On Windows, how should I set up ffmpeg and youtube-dl? Where should I put the exe files?

If you put youtube-dl and ffmpeg in the same directory that you're running the command from, it will work, but that's rather cumbersome.

To make a different directory work - either for ffmpeg, or for youtube-dl, or for both - simply create the directory (say, C:\bin, or C:\Users\<User name>\bin), put all the executables directly in there, and then set your PATH environment variable to include that directory.

From then on, after restarting your shell, you will be able to access both youtube-dl and ffmpeg (and youtube-dl will be able to find ffmpeg) by simply typing youtube-dl or ffmpeg, no matter what directory you're in.

How do I put downloads into a specific folder?

Use the -o to specify an output template, for example -o "/home/user/videos/%(title)s-%(id)s.%(ext)s". If you want this for all of your downloads, put the option into your configuration file.

How do I download a video starting with a -?

Either prepend https://www.youtube.com/watch?v= or separate the ID from the options with --:

youtube-dl -- -wNyEUrxzFU
youtube-dl "https://www.youtube.com/watch?v=-wNyEUrxzFU"

How do I pass cookies to youtube-dl?

Use the --cookies option, for example --cookies /path/to/cookies/file.txt.

In order to extract cookies from browser use any conforming browser extension for exporting cookies. For example, cookies.txt (for Chrome) or Export Cookies (for Firefox).

Note that the cookies file must be in Mozilla/Netscape format and the first line of the cookies file must be either # HTTP Cookie File or # Netscape HTTP Cookie File. Make sure you have correct newline format in the cookies file and convert newlines if necessary to correspond with your OS, namely CRLF (\r\n) for Windows and LF (\n) for Unix and Unix-like systems (Linux, macOS, etc.). HTTP Error 400: Bad Request when using --cookies is a good sign of invalid newline format.

Passing cookies to youtube-dl is a good way to workaround login when a particular extractor does not implement it explicitly. Another use case is working around CAPTCHA some websites require you to solve in particular cases in order to get access (e.g. YouTube, CloudFlare).

How do I stream directly to media player?

You will first need to tell youtube-dl to stream media to stdout with -o -, and also tell your media player to read from stdin (it must be capable of this for streaming) and then pipe former to latter. For example, streaming to vlc can be achieved with:

youtube-dl -o - "https://www.youtube.com/watch?v=BaW_jenozKcj" | vlc -

How do I download only new videos from a playlist?

Use download-archive feature. With this feature you should initially download the complete playlist with --download-archive /path/to/download/archive/file.txt that will record identifiers of all the videos in a special file. Each subsequent run with the same --download-archive will download only new videos and skip all videos that have been downloaded before. Note that only successful downloads are recorded in the file.

For example, at first,

youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

will download the complete PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re playlist and create a file archive.txt. Each subsequent run will only download new videos if any:

youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

Should I add --hls-prefer-native into my config?

When youtube-dl detects an HLS video, it can download it either with the built-in downloader or ffmpeg. Since many HLS streams are slightly invalid and ffmpeg/youtube-dl each handle some invalid cases better than the other, there is an option to switch the downloader if needed.

When youtube-dl knows that one particular downloader works better for a given website, that downloader will be picked. Otherwise, youtube-dl will pick the best downloader for general compatibility, which at the moment happens to be ffmpeg. This choice may change in future versions of youtube-dl, with improvements of the built-in downloader and/or ffmpeg.

In particular, the generic extractor (used when your website is not in the list of supported sites by youtube-dl cannot mandate one specific downloader.

If you put either --hls-prefer-native or --hls-prefer-ffmpeg into your configuration, a different subset of videos will fail to download correctly. Instead, it is much better to file an issue or a pull request which details why the native or the ffmpeg HLS downloader is a better choice for your use case.

Can you add support for this anime video site, or site which shows current movies for free?

As a matter of policy (as well as legality), youtube-dl does not include support for services that specialize in infringing copyright. As a rule of thumb, if you cannot easily find a video that the service is quite obviously allowed to distribute (i.e. that has been uploaded by the creator, the creator's distributor, or is published under a free license), the service is probably unfit for inclusion to youtube-dl.

A note on the service that they don't host the infringing content, but just link to those who do, is evidence that the service should not be included into youtube-dl. The same goes for any DMCA note when the whole front page of the service is filled with videos they are not allowed to distribute. A "fair use" note is equally unconvincing if the service shows copyright-protected videos in full without authorization.

Support requests for services that do purchase the rights to distribute their content are perfectly fine though. If in doubt, you can simply include a source that mentions the legitimate purchase of content.

How can I speed up work on my issue?

(Also known as: Help, my important issue not being solved!) The youtube-dl core developer team is quite small. While we do our best to solve as many issues as possible, sometimes that can take quite a while. To speed up your issue, here's what you can do:

First of all, please do report the issue at our issue tracker. That allows us to coordinate all efforts by users and developers, and serves as a unified point. Unfortunately, the youtube-dl project has grown too large to use personal email as an effective communication channel.

Please read the bug reporting instructions below. A lot of bugs lack all the necessary information. If you can, offer proxy, VPN, or shell access to the youtube-dl developers. If you are able to, test the issue from multiple computers in multiple countries to exclude local censorship or misconfiguration issues.

If nobody is interested in solving your issue, you are welcome to take matters into your own hands and submit a pull request (or coerce/pay somebody else to do so).

Feel free to bump the issue from time to time by writing a small comment ("Issue is still present in youtube-dl version ...from France, but fixed from Belgium"), but please not more than once a month. Please do not declare your issue as important or urgent.

How can I detect whether a given URL is supported by youtube-dl?

For one, have a look at the list of supported sites. Note that it can sometimes happen that the site changes its URL scheme (say, from https://example.com/video/1234567 to https://example.com/v/1234567 ) and youtube-dl reports an URL of a service in that list as unsupported. In that case, simply report a bug.

It is not possible to detect whether a URL is supported or not. That's because youtube-dl contains a generic extractor which matches all URLs. You may be tempted to disable, exclude, or remove the generic extractor, but the generic extractor not only allows users to extract videos from lots of websites that embed a video from another service, but may also be used to extract video from a service that it's hosting itself. Therefore, we neither recommend nor support disabling, excluding, or removing the generic extractor.

If you want to find out whether a given URL is supported, simply call youtube-dl with it. If you get no videos back, chances are the URL is either not referring to a video or unsupported. You can find out which by examining the output (if you run youtube-dl on the console) or catching an UnsupportedError exception if you run it from a Python program.

Why do I need to go through that much red tape when filing bugs?

Before we had the issue template, despite our extensive bug reporting instructions, about 80% of the issue reports we got were useless, for instance because people used ancient versions hundreds of releases old, because of simple syntactic errors (not in youtube-dl but in general shell usage), because the problem was already reported multiple times before, because people did not actually read an error message, even if it said "please install ffmpeg", because people did not mention the URL they were trying to download and many more simple, easy-to-avoid problems, many of whom were totally unrelated to youtube-dl.

youtube-dl is an open-source project manned by too few volunteers, so we'd rather spend time fixing bugs where we are certain none of those simple problems apply, and where we can be reasonably confident to be able to reproduce the issue without asking the reporter repeatedly. As such, the output of youtube-dl -v YOUR_URL_HERE is really all that's required to file an issue. The issue template also guides you through some basic steps you can do, such as checking that your version of youtube-dl is current.

DEVELOPER INSTRUCTIONS

Most users do not need to build youtube-dl and can download the builds or get them from their distribution.

To run youtube-dl as a developer, you don't need to build anything either. Simply execute

python -m youtube_dl

To run the test, simply invoke your favorite test runner, or execute a test file directly; any of the following work:

python -m unittest discover
python test/test_download.py
nosetests

See item 6 of new extractor tutorial for how to run extractor specific test cases.

If you want to create a build of youtube-dl yourself, you'll need

  • python
  • make (only GNU make is supported)
  • pandoc
  • zip
  • nosetests

Adding support for a new site

If you want to add support for a new site, first of all make sure this site is not dedicated to copyright infringement. youtube-dl does not support such sites thus pull requests adding support for them will be rejected.

After you have ensured this site is distributing its content legally, you can follow this quick list (assuming your service is called yourextractor):

  1. Fork this repository

  2. Check out the source code with:

     git clone git@github.com:YOUR_GITHUB_USERNAME/youtube-dl.git
    
  3. Start a new git branch with

     cd youtube-dl
     git checkout -b yourextractor
    
  4. Start with this simple template and save it to youtube_dl/extractor/yourextractor.py:

    # coding: utf-8
    from __future__ import unicode_literals
    
    from .common import InfoExtractor
    
    
    class YourExtractorIE(InfoExtractor):
        _VALID_URL = r'https?://(?:www\.)?yourextractor\.com/watch/(?P<id>[0-9]+)'
        _TEST = {
            'url': 'https://yourextractor.com/watch/42',
            'md5': 'TODO: md5 sum of the first 10241 bytes of the video file (use --test)',
            'info_dict': {
                'id': '42',
                'ext': 'mp4',
                'title': 'Video title goes here',
                'thumbnail': r're:^https?://.*\.jpg$',
                # TODO more properties, either as:
                # * A value
                # * MD5 checksum; start the string with md5:
                # * A regular expression; start the string with re:
                # * Any Python type (for example int or float)
            }
        }
    
        def _real_extract(self, url):
            video_id = self._match_id(url)
            webpage = self._download_webpage(url, video_id)
    
            # TODO more code goes here, for example ...
            title = self._html_search_regex(r'<h1>(.+?)</h1>', webpage, 'title')
    
            return {
                'id': video_id,
                'title': title,
                'description': self._og_search_description(webpage),
                'uploader': self._search_regex(r'<div[^>]+id="uploader"[^>]*>([^<]+)<', webpage, 'uploader', fatal=False),
                # TODO more properties (see youtube_dl/extractor/common.py)
            }
  5. Add an import in youtube_dl/extractor/extractors.py.

  6. Run python test/test_download.py TestDownload.test_YourExtractor. This should fail at first, but you can continually re-run it until you're done. If you decide to add more than one test, then rename _TEST to _TESTS and make it into a list of dictionaries. The tests will then be named TestDownload.test_YourExtractor, TestDownload.test_YourExtractor_1, TestDownload.test_YourExtractor_2, etc. Note that tests with only_matching key in test's dict are not counted in.

  7. Have a look at youtube_dl/extractor/common.py for possible helper methods and a detailed description of what your extractor should and may return. Add tests and code for as many as you want.

  8. Make sure your code follows youtube-dl coding conventions and check the code with flake8. Also make sure your code works under all Python versions claimed supported by youtube-dl, namely 2.6, 2.7, and 3.2+.

  9. When the tests pass, add the new files and commit them and push the result, like this:

     $ git add youtube_dl/extractor/extractors.py
     $ git add youtube_dl/extractor/yourextractor.py
     $ git commit -m '[yourextractor] Add new extractor'
     $ git push origin yourextractor
    
  10. Finally, create a pull request. We'll then review and merge it.

In any case, thank you very much for your contributions!

youtube-dl coding conventions

This section introduces a guide lines for writing idiomatic, robust and future-proof extractor code.

Extractors are very fragile by nature since they depend on the layout of the source data provided by 3rd party media hosters out of your control and this layout tends to change. As an extractor implementer your task is not only to write code that will extract media links and metadata correctly but also to minimize dependency on the source's layout and even to make the code foresee potential future changes and be ready for that. This is important because it will allow the extractor not to break on minor layout changes thus keeping old youtube-dl versions working. Even though this breakage issue is easily fixed by emitting a new version of youtube-dl with a fix incorporated, all the previous versions become broken in all repositories and distros' packages that may not be so prompt in fetching the update from us. Needless to say, some non rolling release distros may never receive an update at all.

Mandatory and optional metafields

For extraction to work youtube-dl relies on metadata your extractor extracts and provides to youtube-dl expressed by an information dictionary or simply info dict. Only the following meta fields in the info dict are considered mandatory for a successful extraction process by youtube-dl:

  • id (media identifier)
  • title (media title)
  • url (media download URL) or formats

In fact only the last option is technically mandatory (i.e. if you can't figure out the download location of the media the extraction does not make any sense). But by convention youtube-dl also treats id and title as mandatory. Thus the aforementioned metafields are the critical data that the extraction does not make any sense without and if any of them fail to be extracted then the extractor is considered completely broken.

Any field apart from the aforementioned ones are considered optional. That means that extraction should be tolerant to situations when sources for these fields can potentially be unavailable (even if they are always available at the moment) and future-proof in order not to break the extraction of general purpose mandatory fields.

Example

Say you have some source dictionary meta that you've fetched as JSON with HTTP request and it has a key summary:

meta = self._download_json(url, video_id)

Assume at this point meta's layout is:

{
    ...
    "summary": "some fancy summary text",
    ...
}

Assume you want to extract summary and put it into the resulting info dict as description. Since description is an optional meta field you should be ready that this key may be missing from the meta dict, so that you should extract it like:

description = meta.get('summary')  # correct

and not like:

description = meta['summary']  # incorrect

The latter will break extraction process with KeyError if summary disappears from meta at some later time but with the former approach extraction will just go ahead with description set to None which is perfectly fine (remember None is equivalent to the absence of data).

Similarly, you should pass fatal=False when extracting optional data from a webpage with _search_regex, _html_search_regex or similar methods, for instance:

description = self._search_regex(
    r'<span[^>]+id="title"[^>]*>([^<]+)<',
    webpage, 'description', fatal=False)

With fatal set to False if _search_regex fails to extract description it will emit a warning and continue extraction.

You can also pass default=<some fallback value>, for example:

description = self._search_regex(
    r'<span[^>]+id="title"[^>]*>([^<]+)<',
    webpage, 'description', default=None)

On failure this code will silently continue the extraction with description set to None. That is useful for metafields that may or may not be present.

Provide fallbacks

When extracting metadata try to do so from multiple sources. For example if title is present in several places, try extracting from at least some of them. This makes it more future-proof in case some of the sources become unavailable.

Example

Say meta from the previous example has a title and you are about to extract it. Since title is a mandatory meta field you should end up with something like:

title = meta['title']

If title disappears from meta in future due to some changes on the hoster's side the extraction would fail since title is mandatory. That's expected.

Assume that you have some another source you can extract title from, for example og:title HTML meta of a webpage. In this case you can provide a fallback scenario:

title = meta.get('title') or self._og_search_title(webpage)

This code will try to extract from meta first and if it fails it will try extracting og:title from a webpage.

Make regular expressions flexible

When using regular expressions try to write them fuzzy and flexible.

Example

Say you need to extract title from the following HTML code:

<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">some fancy title</span>

The code for that task should look similar to:

title = self._search_regex(
    r'<span[^>]+class="title"[^>]*>([^<]+)', webpage, 'title')

Or even better:

title = self._search_regex(
    r'<span[^>]+class=(["\'])title\1[^>]*>(?P<title>[^<]+)',
    webpage, 'title', group='title')

Note how you tolerate potential changes in the style attribute's value or switch from using double quotes to single for class attribute:

The code definitely should not look like:

title = self._search_regex(
    r'<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">(.*?)</span>',
    webpage, 'title', group='title')

Use safe conversion functions

Wrap all extracted numeric data into safe functions from utils: int_or_none, float_or_none. Use them for string to number conversions as well.

EMBEDDING YOUTUBE-DL

youtube-dl makes the best effort to be a good command-line program, and thus should be callable from any programming language. If you encounter any problems parsing its output, feel free to create a report.

From a Python program, you can embed youtube-dl in a more powerful fashion, like this:

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

Most likely, you'll want to use various options. For a list of options available, have a look at youtube_dl/YoutubeDL.py. For a start, if you want to intercept youtube-dl's output, set a logger object.

Here's a more complete example of a program that outputs only errors (and a short message after the download is finished), and downloads/converts the video to an mp3 file:

from __future__ import unicode_literals
import youtube_dl


class MyLogger(object):
    def debug(self, msg):
        pass

    def warning(self, msg):
        pass

    def error(self, msg):
        print(msg)


def my_hook(d):
    if d['status'] == 'finished':
        print('Done downloading, now converting ...')


ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
    'logger': MyLogger(),
    'progress_hooks': [my_hook],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

BUGS

Bugs and suggestions should be reported at: https://github.com/rg3/youtube-dl/issues. Unless you were prompted to or there is another pertinent reason (e.g. GitHub fails to accept the bug report), please do not send bug reports via personal email. For discussions, join us in the IRC channel #youtube-dl on freenode (webchat).

Please include the full output of youtube-dl when run with -v, i.e. add -v flag to your command line, copy the whole output and post it in the issue body wrapped in ``` for better formatting. It should look similar to this:

$ youtube-dl -v <your command line>
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-v', u'https://www.youtube.com/watch?v=BaW_jenozKcj']
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
[debug] youtube-dl version 2015.12.06
[debug] Git HEAD: 135392e
[debug] Python version 2.6.6 - Windows-2003Server-5.2.3790-SP2
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[debug] Proxy map: {}
...

Do not post screenshots of verbose logs; only plain text is acceptable.

The output (including the first lines) contains important debugging information. Issues without the full output are often not reproducible and therefore do not get solved in short order, if ever.

Please re-read your issue once again to avoid a couple of common mistakes (you can and should use this as a checklist):

Is the description of the issue itself sufficient?

We often get issue reports that we cannot really decipher. While in most cases we eventually get the required information after asking back multiple times, this poses an unnecessary drain on our resources. Many contributors, including myself, are also not native speakers, so we may misread some parts.

So please elaborate on what feature you are requesting, or what bug you want to be fixed. Make sure that it's obvious

  • What the problem is
  • How it could be fixed
  • How your proposed solution would look like

If your report is shorter than two lines, it is almost certainly missing some of these, which makes it hard for us to respond to it. We're often too polite to close the issue outright, but the missing info makes misinterpretation likely. As a committer myself, I often get frustrated by these issues, since the only possible way for me to move forward on them is to ask for clarification over and over.

For bug reports, this means that your report should contain the complete output of youtube-dl when called with the -v flag. The error message you get for (most) bugs even says so, but you would not believe how many of our bug reports do not contain this information.

If your server has multiple IPs or you suspect censorship, adding --call-home may be a good idea to get more diagnostics. If the error is ERROR: Unable to extract ... and you cannot reproduce it from multiple countries, add --dump-pages (warning: this will yield a rather large output, redirect it to the file log.txt by adding >log.txt 2>&1 to your command-line) or upload the .dump files you get when you add --write-pages somewhere.

Site support requests must contain an example URL. An example URL is a URL you might want to download, like https://www.youtube.com/watch?v=BaW_jenozKc. There should be an obvious video present. Except under very special circumstances, the main page of a video service (e.g. https://www.youtube.com/) is not an example URL.

Are you using the latest version?

Before reporting any issue, type youtube-dl -U. This should report that you're up-to-date. About 20% of the reports we receive are already fixed, but people are using outdated versions. This goes for feature requests as well.

Is the issue already documented?

Make sure that someone has not already opened the issue you're trying to open. Search at the top of the window or browse the GitHub Issues of this repository. If there is an issue, feel free to write something along the lines of "This affects me as well, with version 2015.01.01. Here is some more information on the issue: ...". While some issues may be old, a new post into them often spurs rapid activity.

Why are existing options not enough?

Before requesting a new feature, please have a quick peek at the list of supported options. Many feature requests are for features that actually exist already! Please, absolutely do show off your work in the issue report and detail how the existing similar options do not solve your problem.

Is there enough context in your bug report?

People want to solve problems, and often think they do us a favor by breaking down their larger problems (e.g. wanting to skip already downloaded files) to a specific request (e.g. requesting us to look whether the file exists before downloading the info page). However, what often happens is that they break down the problem into two steps: One simple, and one impossible (or extremely complicated one).

We are then presented with a very complicated request when the original problem could be solved far easier, e.g. by recording the downloaded video IDs in a separate file. To avoid this, you must include the greater context where it is non-obvious. In particular, every feature request that does not consist of adding support for a new site should contain a use case scenario that explains in what situation the missing feature would be useful.

Does the issue involve one problem, and one problem only?

Some of our users seem to think there is a limit of issues they can or should open. There is no limit of issues they can or should open. While it may seem appealing to be able to dump all your issues into one ticket, that means that someone who solves one of your issues cannot mark the issue as closed. Typically, reporting a bunch of issues leads to the ticket lingering since nobody wants to attack that behemoth, until someone mercifully splits the issue into multiple ones.

In particular, every site support request issue should only pertain to services at one site (generally under a common domain, but always using the same backend technology). Do not request support for vimeo user videos, White house podcasts, and Google Plus pages in the same issue. Also, make sure that you don't post bug reports alongside feature requests. As a rule of thumb, a feature request does not include outputs of youtube-dl that are not immediately related to the feature at hand. Do not post reports of a network error alongside the request for a new video service.

Is anyone going to need the feature?

Only post features that you (or an incapacitated friend you can personally talk to) require. Do not post features because they seem like a good idea. If they are really useful, they will be requested by someone who requires them.

Is your question about youtube-dl?

It may sound strange, but some bug reports we receive are completely unrelated to youtube-dl and relate to a different, or even the reporter's own, application. Please make sure that you are actually using youtube-dl. If you are using a UI for youtube-dl, report the bug to the maintainer of the actual application providing the UI. On the other hand, if your UI for youtube-dl fails in some way you believe is related to youtube-dl, by all means, go ahead and report the bug.

COPYRIGHT

youtube-dl is released into the public domain by the copyright holders.

This README file was originally written by Daniel Bolton and is likewise released into the public domain.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - jakubroztocil/httpie: Modern command line HTTP client – user-friendly curl alternative with intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc. https://httpie.org
Skip to content
Python Shell Makefile Ruby

README.rst

HTTPie: a CLI, cURL-like tool for humans

HTTPie (pronounced aitch-tee-tee-pie) is a command line HTTP client. Its goal is to make CLI interaction with web services as human-friendly as possible. It provides a simple http command that allows for sending arbitrary HTTP requests using a simple and natural syntax, and displays colorized output. HTTPie can be used for testing, debugging, and generally interacting with HTTP servers.

HTTPie compared to cURL

Latest version released on PyPi Build status of the master branch on Mac/Linux Test coverage Chat on Gitter

Contents

1   Main features

  • Expressive and intuitive syntax
  • Formatted and colorized terminal output
  • Built-in JSON support
  • Forms and file uploads
  • HTTPS, proxies, and authentication
  • Arbitrary request data
  • Custom headers
  • Persistent sessions
  • Wget-like downloads
  • Python 2.7 and 3.x support
  • Linux, macOS and Windows support
  • Plugins
  • Documentation
  • Test coverage

2   Installation

2.1   macOS

On macOS, HTTPie can be installed via Homebrew (recommended):

$ brew install httpie

A MacPorts port is also available:

$ port install httpie

2.2   Linux

Most Linux distributions provide a package that can be installed using the system package manager, for example:

# Debian, Ubuntu, etc.
$ apt-get install httpie
# Fedora
$ dnf install httpie
# CentOS, RHEL, ...
$ yum install httpie
# Arch Linux
$ pacman -S httpie

2.3   Windows, etc.

A universal installation method (that works on Windows, Mac OS X, Linux, …, and always provides the latest version) is to use pip:

# Make sure we have an up-to-date version of pip and setuptools:
$ pip install --upgrade pip setuptools

$ pip install --upgrade httpie

(If pip installation fails for some reason, you can try easy_install httpie as a fallback.)

2.4   Python version

Although Python 2.7 is supported as well, it is strongly recommended to install HTTPie against the latest Python 3.x whenever possible. That will ensure that some of the newer HTTP features, such as SNI (Server Name Indication), work out of the box. Python 3 is the default for Homebrew installations starting with version 0.9.4. To see which version HTTPie uses, run http --debug.

2.5   Unstable version

You can also instead of the latest the latest unreleased development version directly from the master branch on GitHub. It is a work-in-progress of a future stable release so the experience might be not as smooth.

Build status of the master branch on Mac/Linux

On macOS you can install it with Homebrew:

$ brew install httpie --HEAD

Otherwise with pip:

$ pip install --upgrade https://github.com/jakubroztocil/httpie/archive/master.tar.gz

Verify that now we have the current development version identifier with the -dev suffix, for example:

$ http --version
1.0.0-dev

3   Usage

Hello World:

$ http httpie.org

Synopsis:

$ http [flags] [METHOD] URL [ITEM [ITEM]]

See also http --help.

3.1   Examples

Custom HTTP method, HTTP headers and JSON data:

$ http PUT example.org X-API-Token:123 name=John

Submitting forms:

$ http -f POST example.org hello=World

See the request that is being sent using one of the output options:

$ http -v example.org

Use Github API to post a comment on an issue with authentication:

$ http -a USERNAME POST https://api.github.com/repos/jakubroztocil/httpie/issues/83/comments body='HTTPie is awesome! :heart:'

Upload a file using redirected input:

$ http example.org < file.json

Download a file and save it via redirected output:

$ http example.org/file > file

Download a file wget style:

$ http --download example.org/file

Use named sessions to make certain aspects or the communication persistent between requests to the same host:

$ http --session=logged-in -a username:password httpbin.org/get API-Key:123

$ http --session=logged-in httpbin.org/headers

Set a custom Host header to work around missing DNS records:

$ http localhost:8000 Host:example.com

4   HTTP method

The name of the HTTP method comes right before the URL argument:

$ http DELETE example.org/todos/7

Which looks similar to the actual Request-Line that is sent:

DELETE /todos/7 HTTP/1.1

When the METHOD argument is omitted from the command, HTTPie defaults to either GET (with no request data) or POST (with request data).

5   Request URL

The only information HTTPie needs to perform a request is a URL. The default scheme is, somewhat unsurprisingly, http://, and can be omitted from the argument – http example.org works just fine.

5.1   Querystring parameters

If you find yourself manually constructing URLs with querystring parameters on the terminal, you may appreciate the param==value syntax for appending URL parameters. With that, you don't have to worry about escaping the & separators for your shell. Also, special characters in parameter values, will also automatically escaped (HTTPie otherwise expects the URL to be already escaped). To search for HTTPie logo on Google Images you could use this command:

$ http www.google.com search=='HTTPie logo' tbm==isch
GET /?search=HTTPie+logo&tbm=isch HTTP/1.1

5.2   URL shortcuts for localhost

Additionally, curl-like shorthand for localhost is supported. This means that, for example :3000 would expand to http://localhost:3000 If the port is omitted, then port 80 is assumed.

$ http :/foo
GET /foo HTTP/1.1
Host: localhost
$ http :3000/bar
GET /bar HTTP/1.1
Host: localhost:3000
$ http :
GET / HTTP/1.1
Host: localhost

5.3   Custom default scheme

You can use the --default-scheme <URL_SCHEME> option to create shortcuts for other protocols than HTTP:

$ alias https='http --default-scheme=https'

6   Request items

There are a few different request item types that provide a convenient mechanism for specifying HTTP headers, simple JSON and form data, files, and URL parameters.

They are key/value pairs specified after the URL. All have in common that they become part of the actual request that is sent and that their type is distinguished only by the separator used: :, =, :=, ==, @, =@, and :=@. The ones with an @ expect a file path as value.

Item Type Description
HTTP Headers Name:Value Arbitrary HTTP header, e.g. X-API-Token:123.
URL parameters name==value Appends the given name/value pair as a query string parameter to the URL. The == separator is used.
Data Fields field=value, field=@file.txt Request data fields to be serialized as a JSON object (default), or to be form-encoded (--form, -f).
Raw JSON fields field:=json, field:=@file.json Useful when sending JSON and one or more fields need to be a Boolean, Number, nested Object, or an Array, e.g., meals:='["ham","spam"]' or pies:=[1,2,3] (note the quotes).
Form File Fields field@/dir/file Only available with --form, -f. For example screenshot@~/Pictures/img.png. The presence of a file field results in a multipart/form-data request.

Note that data fields aren't the only way to specify request data: Redirected input is a mechanism for passing arbitrary request data.

6.1   Escaping rules

You can use \ to escape characters that shouldn't be used as separators (or parts thereof). For instance, foo\==bar will become a data key/value pair (foo= and bar) instead of a URL parameter.

Often it is necessary to quote the values, e.g. foo='bar baz'.

If any of the field names or headers starts with a minus (e.g., -fieldname), you need to place all such items after the special token -- to prevent confusion with --arguments:

$ http httpbin.org/post  --  -name-starting-with-dash=foo -Unusual-Header:bar
POST /post HTTP/1.1
-Unusual-Header: bar
Content-Type: application/json

{
    "-name-starting-with-dash": "value"
}

7   JSON

JSON is the lingua franca of modern web services and it is also the implicit content type HTTPie by default uses.

Simple example:

$ http PUT example.org name=John email=john@example.org
PUT / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Host: example.org

{
    "name": "John",
    "email": "john@example.org"
}

7.1   Default behaviour

If your command includes some data request items, they are serialized as a JSON object by default. HTTPie also automatically sets the following headers, both of which can be overwritten:

Content-Type application/json
Accept application/json, */*

7.2   Explicit JSON

You can use --json, -j to explicitly set Accept to application/json regardless of whether you are sending data (it's a shortcut for setting the header via the usual header notation: http url Accept:'application/json, */*'). Additionally, HTTPie will try to detect JSON responses even when the Content-Type is incorrectly text/plain or unknown.

7.3   Non-string JSON fields

Non-string fields use the := separator, which allows you to embed raw JSON into the resulting object. Text and raw JSON files can also be embedded into fields using =@ and :=@:

$ http PUT api.example.com/person/1 \
    name=John \
    age:=29 married:=false hobbies:='["http", "pies"]' \  # Raw JSON
    description=@about-john.txt \   # Embed text file
    bookmarks:=@bookmarks.json      # Embed JSON file
PUT /person/1 HTTP/1.1
Accept: application/json, */*
Content-Type: application/json
Host: api.example.com

{
    "age": 29,
    "hobbies": [
        "http",
        "pies"
    ],
    "description": "John is a nice guy who likes pies.",
    "married": false,
    "name": "John",
    "bookmarks": {
        "HTTPie": "http://httpie.org",
    }
}

Please note that with this syntax the command gets unwieldy when sending complex data. In that case it's always better to use redirected input:

$ http POST api.example.com/person/1 < person.json

8   Forms

Submitting forms is very similar to sending JSON requests. Often the only difference is in adding the --form, -f option, which ensures that data fields are serialized as, and Content-Type is set to, application/x-www-form-urlencoded; charset=utf-8. It is possible to make form data the implicit content type instead of JSON via the config file.

8.1   Regular forms

$ http --form POST api.example.org/person/1 name='John Smith'
POST /person/1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8

name=John+Smith

8.2   File upload forms

If one or more file fields is present, the serialization and content type is multipart/form-data:

$ http -f POST example.com/jobs name='John Smith' cv@~/Documents/cv.pdf

The request above is the same as if the following HTML form were submitted:

<form enctype="multipart/form-data" method="post" action="http://example.com/jobs">
    <input type="text" name="name" />
    <input type="file" name="cv" />
</form>

Note that @ is used to simulate a file upload form field, whereas =@ just embeds the file content as a regular text field value.

9   HTTP headers

To set custom headers you can use the Header:Value notation:

$ http example.org  User-Agent:Bacon/1.0  'Cookie:valued-visitor=yes;foo=bar'  \
    X-Foo:Bar  Referer:http://httpie.org/
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Cookie: valued-visitor=yes;foo=bar
Host: example.org
Referer: http://httpie.org/
User-Agent: Bacon/1.0
X-Foo: Bar

9.1   Default request headers

There are a couple of default headers that HTTPie sets:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: HTTPie/<version>
Host: <taken-from-URL>

Any of those—except for Host—can be overwritten and some of them unset.

9.2   Empty headers and header un-setting

To unset a previously specified header (such a one of the default headers), use Header::

$ http httpbin.org/headers Accept: User-Agent:

To send a header with an empty value, use Header;:

$ http httpbin.org/headers 'Header;'

10   Authentication

The currently supported authentication schemes are Basic and Digest (see auth plugins for more). There are two flags that control authentication:

--auth, -a Pass a username:password pair as the argument. Or, if you only specify a username (-a username), you'll be prompted for the password before the request is sent. To send an empty password, pass username:. The username:password@hostname URL syntax is supported as well (but credentials passed via -a have higher priority).
--auth-type, -A Specify the auth mechanism. Possible values are basic and digest. The default value is basic so it can often be omitted.

10.1   Basic auth

$ http -a username:password example.org

10.2   Digest auth

$ http -A digest -a username:password example.org

10.3   Password prompt

$ http -a username example.org

10.4   .netrc

Authorization information from your ~/.netrc file is honored as well:

$ cat ~/.netrc
machine httpbin.org
login httpie
password test

$ http httpbin.org/basic-auth/httpie/test
HTTP/1.1 200 OK
[...]

10.5   Auth plugins

Additional authentication mechanism can be installed as plugins. They can be found on the Python Package Index. Here's a few picks:

11   HTTP redirects

By default, HTTP redirects are not followed and only the first response is shown:

$ http httpbin.org/redirect/3

11.1   Follow Location

To instruct HTTPie to follow the Location header of 30x responses and show the final response instead, use the --follow, -F option:

$ http --follow httpbin.org/redirect/3

11.2   Showing intermediary redirect responses

If you additionally wish to see the intermediary requests/responses, then use the --all option as well:

$ http --follow --all httpbin.org/redirect/3

11.3   Limiting maximum redirects followed

To change the default limit of maximum 30 redirects, use the --max-redirects=<limit> option:

$ http --follow --all --max-redirects=5 httpbin.org/redirect/3

12   Proxies

You can specify proxies to be used through the --proxy argument for each protocol (which is included in the value in case of redirects across protocols):

$ http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 example.org

With Basic authentication:

$ http --proxy=http:http://user:pass@10.10.1.10:3128 example.org

12.1   Environment variables

You can also configure proxies by environment variables HTTP_PROXY and HTTPS_PROXY, and the underlying Requests library will pick them up as well. If you want to disable proxies configured through the environment variables for certain hosts, you can specify them in NO_PROXY.

In your ~/.bash_profile:

export HTTP_PROXY=http://10.10.1.10:3128
export HTTPS_PROXY=https://10.10.1.10:1080
export NO_PROXY=localhost,example.com

12.2   SOCKS

Homebrew-installed HTTPie comes with SOCKS proxy support out of the box. To enable SOCKS proxy support for non-Homebrew installations, you'll need to install requests[socks] manually using pip:

$ pip install -U requests[socks]

Usage is the same as for other types of proxies:

$ http --proxy=http:socks5://user:pass@host:port --proxy=https:socks5://user:pass@host:port example.org

13   HTTPS

13.1   Server SSL certificate verification

To skip the host's SSL certificate verification, you can pass --verify=no (default is yes):

$ http --verify=no https://example.org

13.2   Custom CA bundle

You can also use --verify=<CA_BUNDLE_PATH> to set a custom CA bundle path:

$ http --verify=/ssl/custom_ca_bundle https://example.org

13.3   Client side SSL certificate

To use a client side certificate for the SSL communication, you can pass the path of the cert file with --cert:

$ http --cert=client.pem https://example.org

If the private key is not contained in the cert file you may pass the path of the key file with --cert-key:

$ http --cert=client.crt --cert-key=client.key https://example.org

13.4   SSL version

Use the --ssl=<PROTOCOL> to specify the desired protocol version to use. This will default to SSL v2.3 which will negotiate the highest protocol that both the server and your installation of OpenSSL support. The available protocols are ssl2.3, ssl3, tls1, tls1.1, tls1.2. (The actually available set of protocols may vary depending on your OpenSSL installation.)

# Specify the vulnerable SSL v3 protocol to talk to an outdated server:
$ http --ssl=ssl3 https://vulnerable.example.org

13.5   SNI (Server Name Indication)

If you use HTTPie with Python version lower than 2.7.9 (can be verified with http --debug) and need to talk to servers that use SNI (Server Name Indication) you need to install some additional dependencies:

$ pip install --upgrade requests[security]

You can use the following command to test SNI support:

$ http https://sni.velox.ch

14   Output options

By default, HTTPie only outputs the final response and the whole response message is printed (headers as well as the body). You can control what should be printed via several options:

--headers, -h Only the response headers are printed.
--body, -b Only the response body is printed.
--verbose, -v Print the whole HTTP exchange (request and response). This option also enables --all (see below).
--print, -p Selects parts of the HTTP exchange.

--verbose can often be useful for debugging the request and generating documentation examples:

$ http --verbose PUT httpbin.org/put hello=world
PUT /put HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Host: httpbin.org
User-Agent: HTTPie/0.2.7dev

{
    "hello": "world"
}


HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 477
Content-Type: application/json
Date: Sun, 05 Aug 2012 00:25:23 GMT
Server: gunicorn/0.13.4

{
    […]
}

14.1   What parts of the HTTP exchange should be printed

All the other output options are under the hood just shortcuts for the more powerful --print, -p. It accepts a string of characters each of which represents a specific part of the HTTP exchange:

Character Stands for
H request headers
B request body
h response headers
b response body

Print request and response headers:

$ http --print=Hh PUT httpbin.org/put hello=world

14.2   Viewing intermediary requests/responses

To see all the HTTP communication, i.e. the final request/response as well as any possible intermediary requests/responses, use the --all option. The intermediary HTTP communication include followed redirects (with --follow), the first unauthorized request when HTTP digest authentication is used (--auth=digest), etc.

# Include all responses that lead to the final one:
$ http --all --follow httpbin.org/redirect/3

The intermediary requests/response are by default formatted according to --print, -p (and its shortcuts described above). If you'd like to change that, use the --history-print, -P option. It takes the same arguments as --print, -p but applies to the intermediary requests only.

# Print the intermediary requests/responses differently than the final one:
$ http -A digest -a foo:bar --all -p Hh -P H httpbin.org/digest-auth/auth/foo/bar

14.3   Conditional body download

As an optimization, the response body is downloaded from the server only if it's part of the output. This is similar to performing a HEAD request, except that it applies to any HTTP method you use.

Let's say that there is an API that returns the whole resource when it is updated, but you are only interested in the response headers to see the status code after an update:

$ http --headers PATCH example.org/Really-Huge-Resource name='New Name'

Since we are only printing the HTTP headers here, the connection to the server is closed as soon as all the response headers have been received. Therefore, bandwidth and time isn't wasted downloading the body which you don't care about. The response headers are downloaded always, even if they are not part of the output

15   Redirected Input

The universal method for passing request data is through redirected stdin (standard input)—piping. Such data is buffered and then with no further processing used as the request body. There are multiple useful ways to use piping:

Redirect from a file:

$ http PUT example.com/person/1 X-API-Token:123 < person.json

Or the output of another program:

$ grep '401 Unauthorized' /var/log/httpd/error_log | http POST example.org/intruders

You can use echo for simple data:

$ echo '{"name": "John"}' | http PATCH example.com/person/1 X-API-Token:123

You can even pipe web services together using HTTPie:

$ http GET https://api.github.com/repos/jakubroztocil/httpie | http POST httpbin.org/post

You can use cat to enter multiline data on the terminal:

$ cat | http POST example.com
<paste>
^D
$ cat | http POST example.com/todos Content-Type:text/plain
- buy milk
- call parents
^D

On OS X, you can send the contents of the clipboard with pbpaste:

$ pbpaste | http PUT example.com

Passing data through stdin cannot be combined with data fields specified on the command line:

$ echo 'data' | http POST example.org more=data   # This is invalid

To prevent HTTPie from reading stdin data you can use the --ignore-stdin option.

15.1   Request data from a filename

An alternative to redirected stdin is specifying a filename (as @/path/to/file) whose content is used as if it came from stdin.

It has the advantage that the Content-Type header is automatically set to the appropriate value based on the filename extension. For example, the following request sends the verbatim contents of that XML file with Content-Type: application/xml:

$ http PUT httpbin.org/put @/data/file.xml

16   Terminal output

HTTPie does several things by default in order to make its terminal output easy to read.

16.1   Colors and formatting

Syntax highlighting is applied to HTTP headers and bodies (where it makes sense). You can choose your preferred color scheme via the --style option if you don't like the default one (see $ http --help for the possible values).

Also, the following formatting is applied:

  • HTTP headers are sorted by name.
  • JSON data is indented, sorted by keys, and unicode escapes are converted to the characters they represent.

One of these options can be used to control output processing:

--pretty=all Apply both colors and formatting. Default for terminal output.
--pretty=colors Apply colors.
--pretty=format Apply formatting.
--pretty=none Disables output processing. Default for redirected output.

16.2   Binary data

Binary data is suppressed for terminal output, which makes it safe to perform requests to URLs that send back binary data. Binary data is suppressed also in redirected, but prettified output. The connection is closed as soon as we know that the response body is binary,

$ http example.org/Movie.mov

You will nearly instantly see something like this:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Type: video/quicktime
Transfer-Encoding: chunked

+-----------------------------------------+
| NOTE: binary data not shown in terminal |
+-----------------------------------------+

17   Redirected output

HTTPie uses a different set of defaults for redirected output than for terminal output. The differences being:

  • Formatting and colors aren't applied (unless --pretty is specified).
  • Only the response body is printed (unless one of the output options is set).
  • Also, binary data isn't suppressed.

The reason is to make piping HTTPie's output to another programs and downloading files work with no extra flags. Most of the time, only the raw response body is of an interest when the output is redirected.

Download a file:

$ http example.org/Movie.mov > Movie.mov

Download an image of Octocat, resize it using ImageMagick, upload it elsewhere:

$ http octodex.github.com/images/original.jpg | convert - -resize 25% -  | http example.org/Octocats

Force colorizing and formatting, and show both the request and the response in less pager:

$ http --pretty=all --verbose example.org | less -R

The -R flag tells less to interpret color escape sequences included HTTPie`s output.

You can create a shortcut for invoking HTTPie with colorized and paged output by adding the following to your ~/.bash_profile:

function httpless {
    # `httpless example.org'
    http --pretty=all --print=hb "$@" | less -R;
}

18   Download mode

HTTPie features a download mode in which it acts similarly to wget.

When enabled using the --download, -d flag, response headers are printed to the terminal (stderr), and a progress bar is shown while the response body is being saved to a file.

$ http --download https://github.com/jakubroztocil/httpie/archive/master.tar.gz
HTTP/1.1 200 OK
Content-Disposition: attachment; filename=httpie-master.tar.gz
Content-Length: 257336
Content-Type: application/x-gzip

Downloading 251.30 kB to "httpie-master.tar.gz"
Done. 251.30 kB in 2.73862s (91.76 kB/s)

18.1   Downloaded file name

If not provided via --output, -o, the output filename will be determined from Content-Disposition (if available), or from the URL and Content-Type. If the guessed filename already exists, HTTPie adds a unique suffix to it.

18.2   Piping while downloading

You can also redirect the response body to another program while the response headers and progress are still shown in the terminal:

$ http -d https://github.com/jakubroztocil/httpie/archive/master.tar.gz |  tar zxf -

18.3   Resuming downloads

If --output, -o is specified, you can resume a partial download using the --continue, -c option. This only works with servers that support Range requests and 206 Partial Content responses. If the server doesn't support that, the whole file will simply be downloaded:

$ http -dco file.zip example.org/file

18.4   Other notes

  • The --download option only changes how the response body is treated.
  • You can still set custom headers, use sessions, --verbose, -v, etc.
  • --download always implies --follow (redirects are followed).
  • HTTPie exits with status code 1 (error) if the body hasn't been fully downloaded.
  • Accept-Encoding cannot be set with --download.

19   Streamed responses

Responses are downloaded and printed in chunks which allows for streaming and large file downloads without using too much memory. However, when colors and formatting is applied, the whole response is buffered and only then processed at once.

19.1   Disabling buffering

You can use the --stream, -S flag to make two things happen:

  1. The output is flushed in much smaller chunks without any buffering, which makes HTTPie behave kind of like tail -f for URLs.
  2. Streaming becomes enabled even when the output is prettified: It will be applied to each line of the response and flushed immediately. This makes it possible to have a nice output for long-lived requests, such as one to the Twitter streaming API.

19.2   Examples use cases

Prettified streamed response:

$ http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track='Justin Bieber'

Streamed output by small chunks alá tail -f:

# Send each new tweet (JSON object) mentioning "Apple" to another
# server as soon as it arrives from the Twitter streaming API:
$ http --stream -f -a YOUR-TWITTER-NAME https://stream.twitter.com/1/statuses/filter.json track=Apple \
| while read tweet; do echo "$tweet" | http POST example.org/tweets ; done

20   Sessions

By default, every request HTTPie makes is completely independent of any previous ones to the same host.

However, HTTPie also supports persistent sessions via the --session=SESSION_NAME_OR_PATH option. In a session, custom headers—except for the ones starting with Content- or If-—, authorization, and cookies (manually specified or sent by the server) persist between requests to the same host.

# Create a new session
$ http --session=/tmp/session.json example.org API-Token:123

# Re-use an existing session — API-Token will be set:
$ http --session=/tmp/session.json example.org

All session data, including credentials, cookie data, and custom headers are stored in plain text. That means session files can also be created and edited manually in a text editor—they are regular JSON.

20.1   Named sessions

You can create one or more named session per host. For example, this is how you can create a new session named user1 for example.org:

$ http --session=user1 -a user1:password example.org X-Foo:Bar

From now on, you can refer to the session by its name. When you choose to use the session again, any the previously used authorization and HTTP headers will automatically be set:

$ http --session=user1 example.org

To create or reuse a different session, simple specify a different name:

$ http --session=user2 -a user2:password example.org X-Bar:Foo

Named sessions' data is stored in JSON files in the directory ~/.httpie/sessions/<host>/<name>.json (%APPDATA%\httpie\sessions\<host>\<name>.json on Windows).

20.2   Anonymous sessions

Instead of a name, you can also directly specify a path to a session file. This allows for sessions to be re-used across multiple hosts:

$ http --session=/tmp/session.json example.org
$ http --session=/tmp/session.json admin.example.org
$ http --session=~/.httpie/sessions/another.example.org/test.json example.org
$ http --session-read-only=/tmp/session.json example.org

20.3   Readonly session

To use an existing session file without updating it from the request/response exchange once it is created, specify the session name via --session-read-only=SESSION_NAME_OR_PATH instead.

21   Config

HTTPie uses a simple JSON config file.

21.1   Config file location

The default location of the configuration file is ~/.httpie/config.json (or %APPDATA%\httpie\config.json on Windows). The config directory location can be changed by setting the HTTPIE_CONFIG_DIR environment variable. To view the exact location run http --debug.

21.2   Configurable options

The JSON file contains an object with the following keys:

21.2.1   default_options

An Array (by default empty) of default options that should be applied to every invocation of HTTPie.

For instance, you can use this option to change the default style and output options: "default_options": ["--style=fruity", "--body"] Another useful default option could be "--session=default" to make HTTPie always use sessions (one named default will automatically be used). Or you could change the implicit request content type from JSON to form by adding --form to the list.

21.2.2   __meta__

HTTPie automatically stores some of its metadata here. Please do not change.

21.3   Un-setting previously specified options

Default options from the config file, or specified any other way, can be unset for a particular invocation via --no-OPTION arguments passed on the command line (e.g., --no-style or --no-session).

22   Scripting

When using HTTPie from shell scripts, it can be handy to set the --check-status flag. It instructs HTTPie to exit with an error if the HTTP status is one of 3xx, 4xx, or 5xx. The exit status will be 3 (unless --follow is set), 4, or 5, respectively.

#!/bin/bash

if http --check-status --ignore-stdin --timeout=2.5 HEAD example.org/health &> /dev/null; then
    echo 'OK!'
else
    case $? in
        2) echo 'Request timed out!' ;;
        3) echo 'Unexpected HTTP 3xx Redirection!' ;;
        4) echo 'HTTP 4xx Client Error!' ;;
        5) echo 'HTTP 5xx Server Error!' ;;
        6) echo 'Exceeded --max-redirects=<n> redirects!' ;;
        *) echo 'Other Error!' ;;
    esac
fi

22.1   Best practices

The default behaviour of automatically reading stdin is typically not desirable during non-interactive invocations. You most likely want use the --ignore-stdin option to disable it.

It is a common gotcha that without this option HTTPie seemingly hangs. What happens is that when HTTPie is invoked for example from a cron job, stdin is not connected to a terminal. Therefore, rules for redirected input apply, i.e., HTTPie starts to read it expecting that the request body will be passed through. And since there's no data nor EOF, it will be stuck. So unless you're piping some data to HTTPie, this flag should be used in scripts.

Also, it might be good to override the default 30 second --timeout to something that suits you.

23   Meta

23.1   Interface design

The syntax of the command arguments closely corresponds to the actual HTTP requests sent over the wire. It has the advantage that it's easy to remember and read. It is often possible to translate an HTTP request to an HTTPie argument list just by inlining the request elements. For example, compare this HTTP request:

POST /collection HTTP/1.1
X-API-Key: 123
User-Agent: Bacon/1.0
Content-Type: application/x-www-form-urlencoded

name=value&name2=value2

with the HTTPie command that sends it:

$ http -f POST example.org/collection \
  X-API-Key:123 \
  User-Agent:Bacon/1.0 \
  name=value \
  name2=value2

Notice that both the order of elements and the syntax is very similar, and that only a small portion of the command is used to control HTTPie and doesn't directly correspond to any part of the request (here it's only -f asking HTTPie to send a form request).

The two modes, --pretty=all (default for terminal) and --pretty=none (default for redirected output), allow for both user-friendly interactive use and usage from scripts, where HTTPie serves as a generic HTTP client.

As HTTPie is still under heavy development, the existing command line syntax and some of the --OPTIONS may change slightly before HTTPie reaches its final version 1.0. All changes are recorded in the change log.

23.2   User support

Please use the following support channels:

23.3   Related projects

23.3.1   Dependencies

Under the hood, HTTPie uses these two amazing libraries:

  • Requests — Python HTTP library for humans
  • Pygments — Python syntax highlighter

23.3.2   HTTPie friends

HTTPie plays exceptionally well with the following tools:

  • jq — CLI JSON processor that works great in conjunction with HTTPie
  • http-prompt — interactive shell for HTTPie featuring autocomplete and command syntax highlighting

23.3.3   Alternatives

  • httpcat — a lower-level sister utility of HTTPie for constructing raw HTTP requests on the command line.
  • curl — a "Swiss knife" command line tool and an exceptional library for transferring data with URLs.

23.4   Contributing

See CONTRIBUTING.rst.

23.5   Change log

See CHANGELOG.

23.6   Artwork

See claudiatd/httpie-artwork

23.7   Licence

BSD-3-Clause: LICENSE.

23.8   Authors

Jakub Roztocil (@jakubroztocil) created HTTPie and these fine people have contributed.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - nvbn/thefuck: Magnificent app which corrects your previous console command.
Skip to content
Magnificent app which corrects your previous console command.
Python
Latest commit b65e3a9 Jan 29, 2018
thedrow authored and nvbn committed Jan 29, 2018 Added hebrew the list of keyboard layouts (#778)
* Added hebrew the list of keyboard layouts.

Fixes #776.

* Added tests for hebrew layout.

* Fix test.

* Make lint happy.

README.md

The Fuck Version Build Status Windows Build Status Coverage MIT License

Magnificent app which corrects your previous console command, inspired by a @liamosaur tweet.

The Fuck is too slow? Try experimental instant mode!

gif with examples

Few more examples:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...
➜ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master


➜ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...
➜ puthon
No command 'puthon' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
 Command 'python' from package 'python3' (main)
zsh: command not found: puthon

➜ fuck
python [enter/↑/↓/ctrl+c]
Python 3.4.2 (default, Oct  8 2014, 13:08:17)
...
➜ git brnch
git: 'brnch' is not a git command. See 'git --help'.

Did you mean this?
    branch

➜ fuck
git branch [enter/↑/↓/ctrl+c]
* master
➜ lein rpl
'rpl' is not a task. See 'lein help'.

Did you mean this?
         repl

➜ fuck
lein repl [enter/↑/↓/ctrl+c]
nREPL server started on port 54848 on host 127.0.0.1 - nrepl://127.0.0.1:54848
REPL-y 0.3.1
...

If you are not scared to blindly run the changed command, there is a require_confirmation settings option:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim
[sudo] password for nvbn:
Reading package lists... Done
...

Requirements

  • python (3.4+)
  • pip
  • python-dev

Installation

On OS X you can install The Fuck with Homebrew:

brew install thefuck

On Ubuntu you can install The Fuck with:

sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install thefuck

On FreeBSD you can install The Fuck with:

sudo portsnap fetch update
cd /usr/ports/misc/thefuck && sudo make install clean

On other systems you can install The Fuck with pip:

pip install thefuck

Or using an OS package manager (OS X, Ubuntu, Arch).

# You should place this command in your .bash_profile, .bashrc, .zshrc or other startup script:

eval $(thefuck --alias)
# You can use whatever you want as an alias, like for Mondays:
eval $(thefuck --alias FUCK)

Or in your shell config (Bash, Zsh, Fish, Powershell, tcsh).

Changes will be available only in a new shell session. To make them available immediately, run source ~/.bashrc (or your shell config file like .zshrc).

If you want to run fixed command without confirmation you can use -y option:

fuck -y

If you want to fix commands recursively until success you can use -r option:

fuck -r

Update

pip3 install thefuck --upgrade

Aliases changed in 1.34.

How it works

The Fuck tries to match a rule for the previous command, creates a new command using the matched rule and runs it. Rules enabled by default are as follows:

  • adb_unknown_command – fixes misspelled commands like adb logcta;
  • ag_literal – adds -Q to ag when suggested;
  • aws_cli – fixes misspelled commands like aws dynamdb scan;
  • cargo – runs cargo build instead of cargo;
  • cargo_no_command – fixes wrongs commands like cargo buid;
  • cd_correction – spellchecks and correct failed cd commands;
  • cd_mkdir – creates directories before cd'ing into them;
  • cd_parent – changes cd.. to cd ..;
  • chmod_x – add execution bit;
  • composer_not_command – fixes composer command name;
  • cp_omitting_directory – adds -a when you cp directory;
  • cpp11 – adds missing -std=c++11 to g++ or clang++;
  • dirty_untar – fixes tar x command that untarred in the current directory;
  • dirty_unzip – fixes unzip command that unzipped in the current directory;
  • django_south_ghost – adds --delete-ghost-migrations to failed because ghosts django south migration;
  • django_south_merge – adds --merge to inconsistent django south migration;
  • docker_not_command – fixes wrong docker commands like docker tags;
  • dry – fixes repetitions like git git push;
  • fab_command_not_found – fix misspelled fabric commands;
  • fix_alt_space – replaces Alt+Space with Space character;
  • fix_file – opens a file with an error in your $EDITOR;
  • gem_unknown_command – fixes wrong gem commands;
  • git_add – fixes "pathspec 'foo' did not match any file(s) known to git.";
  • git_add_force – adds --force to git add <pathspec>... when paths are .gitignore'd;
  • git_bisect_usage – fixes git bisect strt, git bisect goood, git bisect rset, etc. when bisecting;
  • git_branch_delete – changes git branch -d to git branch -D;
  • git_branch_exists – offers git branch -d foo, git branch -D foo or git checkout foo when creating a branch that already exists;
  • git_branch_list – catches git branch list in place of git branch and removes created branch;
  • git_checkout – fixes branch name or creates new branch;
  • git_commit_amend – offers git commit --amend after previous commit;
  • git_diff_no_index – adds --no-index to previous git diff on untracked files;
  • git_diff_staged – adds --staged to previous git diff with unexpected output;
  • git_fix_stash – fixes git stash commands (misspelled subcommand and missing save);
  • git_flag_after_filename – fixes fatal: bad flag '...' after filename
  • git_help_aliased – fixes git help <alias> commands replacing with the aliased command;
  • git_merge – adds remote to branch names;
  • git_merge_unrelated – adds --allow-unrelated-histories when required
  • git_not_command – fixes wrong git commands like git brnch;
  • git_pull – sets upstream before executing previous git pull;
  • git_pull_clone – clones instead of pulling when the repo does not exist;
  • git_pull_uncommitted_changes – stashes changes before pulling and pops them afterwards;
  • git_push – adds --set-upstream origin $branch to previous failed git push;
  • git_push_different_branch_names – fixes pushes when local brach name does not match remote branch name;
  • git_push_pull – runs git pull when push was rejected;
  • git_push_without_commits – Creates an initial commit if you forget and only git add ., when setting up a new project;
  • git_rebase_no_changes – runs git rebase --skip instead of git rebase --continue when there are no changes;
  • git_remote_delete – replaces git remote delete remote_name with git remote remove remote_name;
  • git_rm_local_modifications – adds -f or --cached when you try to rm a locally modified file;
  • git_rm_recursive – adds -r when you try to rm a directory;
  • git_rm_staged – adds -f or --cached when you try to rm a file with staged changes
  • git_rebase_merge_dir – offers git rebase (--continue | --abort | --skip) or removing the .git/rebase-merge dir when a rebase is in progress;
  • git_remote_seturl_add – runs git remote add when git remote set_url on nonexistant remote;
  • git_stash – stashes your local modifications before rebasing or switching branch;
  • git_stash_pop – adds your local modifications before popping stash, then resets;
  • git_tag_force – adds --force to git tag <tagname> when the tag already exists;
  • git_two_dashes – adds a missing dash to commands like git commit -amend or git rebase -continue;
  • go_run – appends .go extension when compiling/running Go programs;
  • gradle_no_task – fixes not found or ambiguous gradle task;
  • gradle_wrapper – replaces gradle with ./gradlew;
  • grep_arguments_order – fixes grep arguments order for situations like grep -lir . test;
  • grep_recursive – adds -r when you trying to grep directory;
  • grunt_task_not_found – fixes misspelled grunt commands;
  • gulp_not_task – fixes misspelled gulp tasks;
  • has_exists_script – prepends ./ when script/binary exists;
  • heroku_multiple_apps – add --app <app> to heroku commands like heroku pg;
  • heroku_not_command – fixes wrong heroku commands like heroku log;
  • history – tries to replace command with most similar command from history;
  • hostscli – tries to fix hostscli usage;
  • ifconfig_device_not_found – fixes wrong device names like wlan0 to wlp2s0;
  • java – removes .java extension when running Java programs;
  • javac – appends missing .java when compiling Java files;
  • lein_not_task – fixes wrong lein tasks like lein rpl;
  • ln_no_hard_link – catches hard link creation on directories, suggest symbolic link;
  • ln_s_order – fixes ln -s arguments order;
  • ls_all – adds -A to ls when output is empty;
  • ls_lah – adds -lah to ls;
  • man – changes manual section;
  • man_no_space – fixes man commands without spaces, for example mandiff;
  • mercurial – fixes wrong hg commands;
  • missing_space_before_subcommand – fixes command with missing space like npminstall;
  • mkdir_p – adds -p when you trying to create directory without parent;
  • mvn_no_command – adds clean package to mvn;
  • mvn_unknown_lifecycle_phase – fixes misspelled lifecycle phases with mvn;
  • npm_missing_script – fixes npm custom script name in npm run-script <script>;
  • npm_run_script – adds missing run-script for custom npm scripts;
  • npm_wrong_command – fixes wrong npm commands like npm urgrade;
  • no_command – fixes wrong console commands, for example vom/vim;
  • no_such_file – creates missing directories with mv and cp commands;
  • open – either prepends http:// to address passed to open or create a new file or directory and passes it to open;
  • pip_unknown_command – fixes wrong pip commands, for example pip instatl/pip install;
  • php_s – replaces -s by -S when trying to run a local php server;
  • port_already_in_use – kills process that bound port;
  • prove_recursively – adds -r when called with directory;
  • python_command – prepends python when you trying to run not executable/without ./ python script;
  • python_execute – appends missing .py when executing Python files;
  • quotation_marks – fixes uneven usage of ' and " when containing args';
  • path_from_history – replaces not found path with similar absolute path from history;
  • react_native_command_unrecognized – fixes unrecognized react-native commands;
  • remove_trailing_cedilla – remove trailling cedillas ç, a common typo for european keyboard layouts;
  • rm_dir – adds -rf when you trying to remove directory;
  • scm_correction – corrects wrong scm like hg log to git log;
  • sed_unterminated_s – adds missing '/' to sed's s commands;
  • sl_ls – changes sl to ls;
  • ssh_known_hosts – removes host from known_hosts on warning;
  • sudo – prepends sudo to previous command if it failed because of permissions;
  • sudo_command_from_user_path – runs commands from users $PATH with sudo;
  • switch_lang – switches command from your local layout to en;
  • systemctl – correctly orders parameters of confusing systemctl;
  • test.py – runs py.test instead of test.py;
  • touch – creates missing directories before "touching";
  • tsuru_login – runs tsuru login if not authenticated or session expired;
  • tsuru_not_command – fixes wrong tsuru commands like tsuru shell;
  • tmux – fixes tmux commands;
  • unknown_command – fixes hadoop hdfs-style "unknown command", for example adds missing '-' to the command on hdfs dfs ls;
  • vagrant_up – starts up the vagrant instance;
  • whois – fixes whois command;
  • workon_doesnt_exists – fixes virtualenvwrapper env name os suggests to create new.
  • yarn_alias – fixes aliased yarn commands like yarn ls;
  • yarn_command_not_found – fixes misspelled yarn commands;
  • yarn_command_replaced – fixes replaced yarn commands;
  • yarn_help – makes it easier to open yarn documentation;

Enabled by default only on specific platforms:

  • apt_get – installs app from apt if it not installed (requires python-commandnotfound / python3-commandnotfound);
  • apt_get_search – changes trying to search using apt-get with searching using apt-cache;
  • apt_invalid_operation – fixes invalid apt and apt-get calls, like apt-get isntall vim;
  • apt_list_upgradable – helps you run apt list --upgradable after apt update;
  • apt_upgrade – helps you run apt upgrade after apt list --upgradable;
  • brew_cask_dependency – installs cask dependencies;
  • brew_install – fixes formula name for brew install;
  • brew_link – adds --overwrite --dry-run if linking fails;
  • brew_uninstall – adds --force to brew uninstall if multiple versions were installed;
  • brew_unknown_command – fixes wrong brew commands, for example brew docto/brew doctor;
  • brew_update_formula – turns brew update <formula> into brew upgrade <formula>;
  • dnf_no_such_command – fixes mistyped DNF commands;
  • pacman – installs app with pacman if it is not installed (uses yaourt if available);
  • pacman_not_found – fixes package name with pacman or yaourt.

Bundled, but not enabled by default:

  • git_push_force – adds --force-with-lease to a git push (may conflict with git_push_pull);
  • rm_root – adds --no-preserve-root to rm -rf / command.

Creating your own rules

For adding your own rule you should create your-rule-name.py in ~/.config/thefuck/rules. The rule should contain two functions:

match(command: Command) -> bool
get_new_command(command: Command) -> str | list[str]

Also the rule can contain an optional function

side_effect(old_command: Command, fixed_command: str) -> None

and optional enabled_by_default, requires_output and priority variables.

Command has three attributes: script, output and script_parts. Rule shouldn't change Command.

Rules api changed in 3.0: For accessing settings in rule you need to import it with from thefuck.conf import settings. settings is a special object filled with ~/.config/thefuck/settings.py and values from env (see more below).

Simple example of the rule for running script with sudo:

def match(command):
    return ('permission denied' in command.output.lower()
            or 'EACCES' in command.output)


def get_new_command(command):
    return 'sudo {}'.format(command.script)

# Optional:
enabled_by_default = True

def side_effect(command, fixed_command):
    subprocess.call('chmod 777 .', shell=True)

priority = 1000  # Lower first, default is 1000

requires_output = True

More examples of rules, utility functions for rules, app/os-specific helpers.

Settings

The Fuck has a few settings parameters which can be changed in $XDG_CONFIG_HOME/thefuck/settings.py ($XDG_CONFIG_HOME defaults to ~/.config):

  • rules – list of enabled rules, by default thefuck.conf.DEFAULT_RULES;
  • exclude_rules – list of disabled rules, by default [];
  • require_confirmation – requires confirmation before running new command, by default True;
  • wait_command – max amount of time in seconds for getting previous command output;
  • no_colors – disable colored output;
  • priority – dict with rules priorities, rule with lower priority will be matched first;
  • debug – enables debug output, by default False;
  • history_limit – numeric value of how many history commands will be scanned, like 2000;
  • alter_history – push fixed command to history, by default True;
  • wait_slow_command – max amount of time in seconds for getting previous command output if it in slow_commands list;
  • slow_commands – list of slow commands.

Example of settings.py:

rules = ['sudo', 'no_command']
exclude_rules = ['git_push']
require_confirmation = True
wait_command = 10
no_colors = False
priority = {'sudo': 100, 'no_command': 9999}
debug = False
history_limit = 9999
wait_slow_command = 20
slow_commands = ['react-native', 'gradle']

Or via environment variables:

  • THEFUCK_RULES – list of enabled rules, like DEFAULT_RULES:rm_root or sudo:no_command;
  • THEFUCK_EXCLUDE_RULES – list of disabled rules, like git_pull:git_push;
  • THEFUCK_REQUIRE_CONFIRMATION – require confirmation before running new command, true/false;
  • THEFUCK_WAIT_COMMAND – max amount of time in seconds for getting previous command output;
  • THEFUCK_NO_COLORS – disable colored output, true/false;
  • THEFUCK_PRIORITY – priority of the rules, like no_command=9999:apt_get=100, rule with lower priority will be matched first;
  • THEFUCK_DEBUG – enables debug output, true/false;
  • THEFUCK_HISTORY_LIMIT – how many history commands will be scanned, like 2000;
  • THEFUCK_ALTER_HISTORY – push fixed command to history true/false;
  • THEFUCK_WAIT_SLOW_COMMAND – max amount of time in seconds for getting previous command output if it in slow_commands list;
  • THEFUCK_SLOW_COMMANDS – list of slow commands, like lein:gradle.

For example:

export THEFUCK_RULES='sudo:no_command'
export THEFUCK_EXCLUDE_RULES='git_pull:git_push'
export THEFUCK_REQUIRE_CONFIRMATION='true'
export THEFUCK_WAIT_COMMAND=10
export THEFUCK_NO_COLORS='false'
export THEFUCK_PRIORITY='no_command=9999:apt_get=100'
export THEFUCK_HISTORY_LIMIT='2000'

Third-party packages with rules

If you want to make very specific rules or rules, that you don't want to make public, but share with other people. You can create a special package with name thefuck_contrib_* with following structure:

thefuck_contrib_foo
  thefuck_contrib_foo
    rules
      __init__.py
      *third-party rules*
    __init__.py
    *third-party-utils*
  setup.py

And thefuck will find all rules from rules module.

Experimental instant mode

By default The Fuck reruns a previous command and that takes time, in instant mode The Fuck logs output with script and just reads the log.

gif with instant mode

At the moment only Python 3 with bash or zsh is supported.

For enabling instant mode you need to add --enable-experimental-instant-mode to alias initialization in your .bashrc, .bash_profile or .zshrc like:

eval $(thefuck --alias --enable-experimental-instant-mode)

Developing

See CONTRIBUTING.md

License MIT

Project License can be found here.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - jlevy/the-art-of-command-line: Master the command line, in one page
Skip to content
Switch branches/tags
Nothing to show
Latest commit 405d4fa Jan 10, 2018
jlevy committed Jan 10, 2018 Merge pull request #539 from 0xmohit/brace-expansion
Mention that brace expansion is performed before any other expansion

README.md

🌍 ČeštinaDeutschΕλληνικάEnglishEspañolFrançaisIndonesiaItaliano日本語한국어PortuguêsRomânăРусскийSlovenščinaУкраїнська简体中文繁體中文

The Art of Command Line

Ask a Question

Join the chat at https://gitter.im/jlevy/the-art-of-command-line

curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '\w+' | tr -d '`' | cowsay -W50

Fluency on the command line is a skill often neglected or considered arcane, but it improves your flexibility and productivity as an engineer in both obvious and subtle ways. This is a selection of notes and tips on using the command-line that we've found useful when working on Linux. Some tips are elementary, and some are fairly specific, sophisticated, or obscure. This page is not long, but if you can use and recall all the items here, you know a lot.

This work is the result of many authors and translators. Some of this originally appeared on Quora, but it has since moved to GitHub, where people more talented than the original author have made numerous improvements. Please submit a question if you have a question related to the command line. Please contribute if you see an error or something that could be better!

Meta

Scope:

  • This guide is both for beginners and the experienced. The goals are breadth (everything important), specificity (give concrete examples of the most common case), and brevity (avoid things that aren't essential or digressions you can easily look up elsewhere). Every tip is essential in some situation or significantly saves time over alternatives.
  • This is written for Linux, with the exception of the "OS X only" and "Windows only" sections. Many of the other items apply or can be installed on other Unices or OS X (or even Cygwin).
  • The focus is on interactive Bash, though many tips apply to other shells and to general Bash scripting.
  • It includes both "standard" Unix commands as well as ones that require special package installs -- so long as they are important enough to merit inclusion.

Notes:

  • To keep this to one page, content is implicitly included by reference. You're smart enough to look up more detail elsewhere once you know the idea or command to Google. Use apt-get, yum, dnf, pacman, pip or brew (as appropriate) to install new programs.
  • Use Explainshell to get a helpful breakdown of what commands, options, pipes etc. do.

Basics

  • Learn basic Bash. Actually, type man bash and at least skim the whole thing; it's pretty easy to follow and not that long. Alternate shells can be nice, but Bash is powerful and always available (learning only zsh, fish, etc., while tempting on your own laptop, restricts you in many situations, such as using existing servers).

  • Learn at least one text-based editor well. Ideally Vim (vi), as there's really no competition for random editing in a terminal (even if you use Emacs, a big IDE, or a modern hipster editor most of the time).

  • Know how to read documentation with man (for the inquisitive, man man lists the section numbers, e.g. 1 is "regular" commands, 5 is files/conventions, and 8 are for administration). Find man pages with apropos. Know that some commands are not executables, but Bash builtins, and that you can get help on them with help and help -d. You can find out whether a command is an executable, shell builtin or an alias by using type command.

  • Learn about redirection of output and input using > and < and pipes using |. Know > overwrites the output file and >> appends. Learn about stdout and stderr.

  • Learn about file glob expansion with * (and perhaps ? and [...]) and quoting and the difference between double " and single ' quotes. (See more on variable expansion below.)

  • Be familiar with Bash job management: &, ctrl-z, ctrl-c, jobs, fg, bg, kill, etc.

  • Know ssh, and the basics of passwordless authentication, via ssh-agent, ssh-add, etc.

  • Basic file management: ls and ls -l (in particular, learn what every column in ls -l means), less, head, tail and tail -f (or even better, less +F), ln and ln -s (learn the differences and advantages of hard versus soft links), chown, chmod, du (for a quick summary of disk usage: du -hs *). For filesystem management, df, mount, fdisk, mkfs, lsblk. Learn what an inode is (ls -i or df -i).

  • Basic network management: ip or ifconfig, dig, traceroute, route.

  • Learn and use a version control management system, such as git.

  • Know regular expressions well, and the various flags to grep/egrep. The -i, -o, -v, -A, -B, and -C options are worth knowing.

  • Learn to use apt-get, yum, dnf or pacman (depending on distro) to find and install packages. And make sure you have pip to install Python-based command-line tools (a few below are easiest to install via pip).

Everyday use

  • In Bash, use Tab to complete arguments or list all available commands and ctrl-r to search through command history (after pressing, type to search, press ctrl-r repeatedly to cycle through more matches, press Enter to execute the found command, or hit the right arrow to put the result in the current line to allow editing).

  • In Bash, use ctrl-w to delete the last word, and ctrl-u to delete the content from current cursor back to the start of the line. Use alt-b and alt-f to move by word, ctrl-a to move cursor to beginning of line, ctrl-e to move cursor to end of line, ctrl-k to kill to the end of the line, ctrl-l to clear the screen. See man readline for all the default keybindings in Bash. There are a lot. For example alt-. cycles through previous arguments, and alt-* expands a glob.

  • Alternatively, if you love vi-style key-bindings, use set -o vi (and set -o emacs to put it back).

  • For editing long commands, after setting your editor (for example export EDITOR=vim), ctrl-x ctrl-e will open the current command in an editor for multi-line editing. Or in vi style, escape-v.

  • To see recent commands, use history. Follow with !n (where n is the command number) to execute again. There are also many abbreviations you can use, the most useful probably being !$ for last argument and !! for last command (see "HISTORY EXPANSION" in the man page). However, these are often easily replaced with ctrl-r and alt-..

  • Go to your home directory with cd. Access files relative to your home directory with the ~ prefix (e.g. ~/.bashrc). In sh scripts refer to the home directory as $HOME.

  • To go back to the previous working directory: cd -.

  • If you are halfway through typing a command but change your mind, hit alt-# to add a # at the beginning and enter it as a comment (or use ctrl-a, #, enter). You can then return to it later via command history.

  • Use xargs (or parallel). It's very powerful. Note you can control how many items execute per line (-L) as well as parallelism (-P). If you're not sure if it'll do the right thing, use xargs echo first. Also, -I{} is handy. Examples:

      find . -name '*.py' | xargs grep some_function
      cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p is a helpful display of the process tree.

  • Use pgrep and pkill to find or signal processes by name (-f is helpful).

  • Know the various signals you can send processes. For example, to suspend a process, use kill -STOP [pid]. For the full list, see man 7 signal

  • Use nohup or disown if you want a background process to keep running forever.

  • Check what processes are listening via netstat -lntp or ss -plat (for TCP; add -u for UDP) or lsof -iTCP -sTCP:LISTEN -P -n (which also works on OS X).

  • See also lsof and fuser for open sockets and files.

  • See uptime or w to know how long the system has been running.

  • Use alias to create shortcuts for commonly used commands. For example, alias ll='ls -latr' creates a new alias ll.

  • Save aliases, shell settings, and functions you commonly use in ~/.bashrc, and arrange for login shells to source it. This will make your setup available in all your shell sessions.

  • Put the settings of environment variables as well as commands that should be executed when you login in ~/.bash_profile. Separate configuration will be needed for shells you launch from graphical environment logins and cron jobs.

  • Synchronize your configuration files (e.g. .bashrc and .bash_profile) among various computers with Git.

  • Understand that care is needed when variables and filenames include whitespace. Surround your Bash variables with quotes, e.g. "$FOO". Prefer the -0 or -print0 options to enable null characters to delimit filenames, e.g. locate -0 pattern | xargs -0 ls -al or find / -print0 -type d | xargs -0 ls -al. To iterate on filenames containing whitespace in a for loop, set your IFS to be a newline only using IFS=$'\n'.

  • In Bash scripts, use set -x (or the variant set -v, which logs raw input, including unexpanded variables and comments) for debugging output. Use strict modes unless you have a good reason not to: Use set -e to abort on errors (nonzero exit code). Use set -u to detect unset variable usages. Consider set -o pipefail too, to on errors within pipes, too (though read up on it more if you do, as this topic is a bit subtle). For more involved scripts, also use trap on EXIT or ERR. A useful habit is to start a script like this, which will make it detect and abort on common errors and print a message:

      set -euo pipefail
      trap "echo 'error: Script failed: see failed command above'" ERR
  • In Bash scripts, subshells (written with parentheses) are convenient ways to group commands. A common example is to temporarily move to a different working directory, e.g.
      # do something in current dir
      (cd /some/other/dir && other-command)
      # continue in original dir
  • In Bash, note there are lots of kinds of variable expansion. Checking a variable exists: ${name:?error message}. For example, if a Bash script requires a single argument, just write input_file=${1:?usage: $0 input_file}. Using a default value if a variable is empty: ${name:-default}. If you want to have an additional (optional) parameter added to the previous example, you can use something like output_file=${2:-logfile}. If $2 is omitted and thus empty, output_file will be set to logfile. Arithmetic expansion: i=$(( (i + 1) % 5 )). Sequences: {1..10}. Trimming of strings: ${var%suffix} and ${var#prefix}. For example if var=foo.pdf, then echo ${var%.pdf}.txt prints foo.txt.

  • Brace expansion using {...} can reduce having to re-type similar text and automate combinations of items. This is helpful in examples like mv foo.{txt,pdf} some-dir (which moves both files), cp somefile{,.bak} (which expands to cp somefile somefile.bak) or mkdir -p test-{a,b,c}/subtest-{1,2,3} (which expands all possible combinations and creates a directory tree). Brace expansion is performed before any other expansion.

  • The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and filename expansion. (For example, a range like {1..20} cannot be expressed with variables using {$a..$b}. Use seq or a for loop instead, e.g., seq $a $b or for((i=a; i<=b; i++)); do ... ; done.)

  • The output of a command can be treated like a file via <(some command) (known as process substitution). For example, compare local /etc/hosts with a remote one:

      diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • When writing scripts you may want to put all of your code in curly braces. If the closing brace is missing, your script will be prevented from executing due to a syntax error. This makes sense when your script is going to be downloaded from the web, since it prevents partially downloaded scripts from executing:
{
      # Your code here
}
  • Know about "here documents" in Bash, as in cat <<EOF ....

  • In Bash, redirect both standard output and standard error via: some-command >logfile 2>&1 or some-command &>logfile. Often, to ensure a command does not leave an open file handle to standard input, tying it to the terminal you are in, it is also good practice to add </dev/null.

  • Use man ascii for a good ASCII table, with hex and decimal values. For general encoding info, man unicode, man utf-8, and man latin1 are helpful.

  • Use screen or tmux to multiplex the screen, especially useful on remote ssh sessions and to detach and re-attach to a session. byobu can enhance screen or tmux providing more information and easier management. A more minimal alternative for session persistence only is dtach.

  • In ssh, knowing how to port tunnel with -L or -D (and occasionally -R) is useful, e.g. to access web sites from a remote server.

  • It can be useful to make a few optimizations to your ssh configuration; for example, this ~/.ssh/config contains settings to avoid dropped connections in certain network environments, uses compression (which is helpful with scp over low-bandwidth connections), and multiplex channels to the same server with a local control file:

      TCPKeepAlive=yes
      ServerAliveInterval=15
      ServerAliveCountMax=6
      Compression=yes
      ControlMaster auto
      ControlPath /tmp/%r@%h:%p
      ControlPersist yes
  • A few other options relevant to ssh are security sensitive and should be enabled with care, e.g. per subnet or host or in trusted networks: StrictHostKeyChecking=no, ForwardAgent=yes

  • Consider mosh an alternative to ssh that uses UDP, avoiding dropped connections and adding convenience on the road (requires server-side setup).

  • To get the permissions on a file in octal form, which is useful for system configuration but not available in ls and easy to bungle, use something like

      stat -c '%A %a %n' /etc/timezone
  • For interactive selection of values from the output of another command, use percol or fzf.

  • For interaction with files based on the output of another command (like git), use fpp (PathPicker).

  • For a simple web server for all files in the current directory (and subdirs), available to anyone on your network, use: python -m SimpleHTTPServer 7777 (for port 7777 and Python 2) and python -m http.server 7777 (for port 7777 and Python 3).

  • For running a command as another user, use sudo. Defaults to running as root; use -u to specify another user. Use -i to login as that user (you will be asked for your password).

  • For switching the shell to another user, use su username or su - username. The latter with "-" gets an environment as if another user just logged in. Omitting the username defaults to root. You will be asked for the password of the user you are switching to.

  • Know about the 128K limit on command lines. This "Argument list too long" error is common when wildcard matching large numbers of files. (When this happens alternatives like find and xargs may help.)

  • For a basic calculator (and of course access to Python in general), use the python interpreter. For example,

>>> 2+3
5

Processing files and data

  • To locate a file by name in the current directory, find . -iname '*something*' (or similar). To find a file anywhere by name, use locate something (but bear in mind updatedb may not have indexed recently created files).

  • For general searching through source or data files, there are several options more advanced or faster than grep -r, including (in rough order from older to newer) ack, ag ("the silver searcher"), and rg (ripgrep).

  • To convert HTML to text: lynx -dump -stdin

  • For Markdown, HTML, and all kinds of document conversion, try pandoc.

  • If you must handle XML, xmlstarlet is old but good.

  • For JSON, use jq. For interactive use, also see jid and jiq.

  • For YAML, use shyaml.

  • For Excel or CSV files, csvkit provides in2csv, csvcut, csvjoin, csvgrep, etc.

  • For Amazon S3, s3cmd is convenient and s4cmd is faster. Amazon's aws and the improved saws are essential for other AWS-related tasks.

  • Know about sort and uniq, including uniq's -u and -d options -- see one-liners below. See also comm.

  • Know about cut, paste, and join to manipulate text files. Many people use cut but forget about join.

  • Know about wc to count newlines (-l), characters (-m), words (-w) and bytes (-c).

  • Know about tee to copy from stdin to a file and also to stdout, as in ls -al | tee file.txt.

  • For more complex calculations, including grouping, reversing fields, and statistical calculations, consider datamash.

  • Know that locale affects a lot of command line tools in subtle ways, including sorting order (collation) and performance. Most Linux installations will set LANG or other locale variables to a local setting like US English. But be aware sorting will change if you change locale. And know i18n routines can make sort or other commands run many times slower. In some situations (such as the set operations or uniqueness operations below) you can safely ignore slow i18n routines entirely and use traditional byte-based sort order, using export LC_ALL=C.

  • You can set a specific command's environment by prefixing its invocation with the environment variable settings, as in TZ=Pacific/Fiji date.

  • Know basic awk and sed for simple data munging. See One-liners for examples.

  • To replace all occurrences of a string in place, in one or more files:

      perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
  • To rename multiple files and/or search and replace within files, try repren. (In some cases the rename command also allows multiple renames, but be careful as its functionality is not the same on all Linux distributions.)
      # Full rename of filenames, directories, and contents foo -> bar:
      repren --full --preserve-case --from foo --to bar .
      # Recover backup files whatever.bak -> whatever:
      repren --renames --from '(.*)\.bak' --to '\1' *.bak
      # Same as above, using rename, if available:
      rename 's/\.bak$//' *.bak
  • As the man page says, rsync really is a fast and extraordinarily versatile file copying tool. It's known for synchronizing between machines but is equally useful locally. When security restrictions allow, using rsync instead of scp allows recovery of a transfer without restarting from scratch. It also is among the fastest ways to delete large numbers of files:
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
  • For seeing progress when copying files, use pv, pycp, progress, rsync --progress, or, for block-level copying, dd status=progress.

  • Use shuf to shuffle or select random lines from a file.

  • Know sort's options. For numbers, use -n, or -h for handling human-readable numbers (e.g. from du -h). Know how keys work (-t and -k). In particular, watch out that you need to write -k1,1 to sort by only the first field; -k1 means sort according to the whole line. Stable sort (sort -s) can be useful. For example, to sort first by field 2, then secondarily by field 1, you can use sort -k1,1 | sort -s -k2,2.

  • If you ever need to write a tab literal in a command line in Bash (e.g. for the -t argument to sort), press ctrl-v [Tab] or write $'\t' (the latter is better as you can copy/paste it).

  • The standard tools for patching source code are diff and patch. See also diffstat for summary statistics of a diff and sdiff for a side-by-side diff. Note diff -r works for entire directories. Use diff -r tree1 tree2 | diffstat for a summary of changes. Use vimdiff to compare and edit files.

  • For binary files, use hd, hexdump or xxd for simple hex dumps and bvi, hexedit or biew for binary editing.

  • Also for binary files, strings (plus grep, etc.) lets you find bits of text.

  • For binary diffs (delta compression), use xdelta3.

  • To convert text encodings, try iconv. Or uconv for more advanced use; it supports some advanced Unicode things. For example, this command lowercases and removes all accents (by expanding and dropping them):

      uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
  • To split files into pieces, see split (to split by size) and csplit (to split by a pattern).

  • To manipulate date and time expressions, use dateadd, datediff, strptime etc. from dateutils.

  • Use zless, zmore, zcat, and zgrep to operate on compressed files.

  • File attributes are settable via chattr and offer a lower-level alternative to file permissions. For example, to protect against accidental file deletion the immutable flag: sudo chattr +i /critical/directory/or/file

  • Use getfacl and setfacl to save and restore file permissions. For example:

   getfacl -R /some/path > permissions.txt
   setfacl --restore=permissions.txt
  • To create empty files quickly, use truncate (creates sparse file), fallocate (ext4, xfs, btrfs and ocfs2 filesystems), xfs_mkfile (almost any filesystems, comes in xfsprogs package), mkfile (for Unix-like systems like Solaris, Mac OS).

System debugging

  • For web debugging, curl and curl -I are handy, or their wget equivalents, or the more modern httpie.

  • To know current cpu/disk status, the classic tools are top (or the better htop), iostat, and iotop. Use iostat -mxz 15 for basic CPU and detailed per-partition disk stats and performance insight.

  • For network connection details, use netstat and ss.

  • For a quick overview of what's happening on a system, dstat is especially useful. For broadest overview with details, use glances.

  • To know memory status, run and understand the output of free and vmstat. In particular, be aware the "cached" value is memory held by the Linux kernel as file cache, so effectively counts toward the "free" value.

  • Java system debugging is a different kettle of fish, but a simple trick on Oracle's and some other JVMs is that you can run kill -3 <pid> and a full stack trace and heap summary (including generational garbage collection details, which can be highly informative) will be dumped to stderr/logs. The JDK's jps, jstat, jstack, jmap are useful. SJK tools are more advanced.

  • Use mtr as a better traceroute, to identify network issues.

  • For looking at why a disk is full, ncdu saves time over the usual commands like du -sh *.

  • To find which socket or process is using bandwidth, try iftop or nethogs.

  • The ab tool (comes with Apache) is helpful for quick-and-dirty checking of web server performance. For more complex load testing, try siege.

  • For more serious network debugging, wireshark, tshark, or ngrep.

  • Know about strace and ltrace. These can be helpful if a program is failing, hanging, or crashing, and you don't know why, or if you want to get a general idea of performance. Note the profiling option (-c), and the ability to attach to a running process (-p). Use trace child option (-f) to avoid missing important calls.

  • Know about ldd to check shared libraries etc — but never run it on untrusted files.

  • Know how to connect to a running process with gdb and get its stack traces.

  • Use /proc. It's amazingly helpful sometimes when debugging live problems. Examples: /proc/cpuinfo, /proc/meminfo, /proc/cmdline, /proc/xxx/cwd, /proc/xxx/exe, /proc/xxx/fd/, /proc/xxx/smaps (where xxx is the process id or pid).

  • When debugging why something went wrong in the past, sar can be very helpful. It shows historic statistics on CPU, memory, network, etc.

  • For deeper systems and performance analyses, look at stap (SystemTap), perf, and sysdig.

  • Check what OS you're on with uname or uname -a (general Unix/kernel info) or lsb_release -a (Linux distro info).

  • Use dmesg whenever something's acting really funny (it could be hardware or driver issues).

  • If you delete a file and it doesn't free up expected disk space as reported by du, check whether the file is in use by a process: lsof | grep deleted | grep "filename-of-my-big-file"

One-liners

A few examples of piecing together commands:

  • It is remarkably helpful sometimes that you can do set intersection, union, and difference of text files via sort/uniq. Suppose a and b are text files that are already uniqued. This is fast, and works on files of arbitrary size, up to many gigabytes. (Sort is not limited by memory, though you may need to use the -T option if /tmp is on a small root partition.) See also the note about LC_ALL above and sort's -u option (left out for clarity below).
      sort a b | uniq > c   # c is a union b
      sort a b | uniq -d > c   # c is a intersect b
      sort a b b | uniq -u > c   # c is set difference a - b
  • Use grep . * to quickly examine the contents of all files in a directory (so each line is paired with the filename), or head -100 * (so each file has a heading). This can be useful for directories filled with config settings like those in /sys, /proc, /etc.

  • Summing all numbers in the third column of a text file (this is probably 3X faster and 3X less code than equivalent Python):

      awk '{ x += $3 } END { print x }' myfile
  • To see sizes/dates on a tree of files, this is like a recursive ls -l but is easier to read than ls -lR:
      find . -type f -ls
  • Say you have a text file, like a web server log, and a certain value that appears on some lines, such as an acct_id parameter that is present in the URL. If you want a tally of how many requests for each acct_id:
      egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
  • To continuously monitor changes, use watch, e.g. check changes to files in a directory with watch -d -n 2 'ls -rtlh | tail' or to network settings while troubleshooting your wifi settings with watch -d -n 2 ifconfig.

  • Run this function to get a random tip from this document (parses Markdown and extracts an item):

      function taocl() {
        curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
          sed '/cowsay[.]png/d' |
          pandoc -f markdown -t html |
          xmlstarlet fo --html --dropdtd |
          xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
          xmlstarlet unesc | fmt -80 | iconv -t US
      }

Obscure but useful

  • expr: perform arithmetic or boolean operations or evaluate regular expressions

  • m4: simple macro processor

  • yes: print a string a lot

  • cal: nice calendar

  • env: run a command (useful in scripts)

  • printenv: print out environment variables (useful in debugging and scripts)

  • look: find English words (or lines in a file) beginning with a string

  • cut, paste and join: data manipulation

  • fmt: format text paragraphs

  • pr: format text into pages/columns

  • fold: wrap lines of text

  • column: format text fields into aligned, fixed-width columns or tables

  • expand and unexpand: convert between tabs and spaces

  • nl: add line numbers

  • seq: print numbers

  • bc: calculator

  • factor: factor integers

  • gpg: encrypt and sign files

  • toe: table of terminfo entries

  • nc: network debugging and data transfer

  • socat: socket relay and tcp port forwarder (similar to netcat)

  • slurm: network traffic visualization

  • dd: moving data between files or devices

  • file: identify type of a file

  • tree: display directories and subdirectories as a nesting tree; like ls but recursive

  • stat: file info

  • time: execute and time a command

  • timeout: execute a command for specified amount of time and stop the process when the specified amount of time completes.

  • lockfile: create semaphore file that can only be removed by rm -f

  • logrotate: rotate, compress and mail logs.

  • watch: run a command repeatedly, showing results and/or highlighting changes

  • when-changed: runs any command you specify whenever it sees file changed. See inotifywait and entr as well.

  • tac: print files in reverse

  • comm: compare sorted files line by line

  • strings: extract text from binary files

  • tr: character translation or manipulation

  • iconv or uconv: conversion for text encodings

  • split and csplit: splitting files

  • sponge: read all input before writing it, useful for reading from then writing to the same file, e.g., grep -v something some-file | sponge some-file

  • units: unit conversions and calculations; converts furlongs per fortnight to twips per blink (see also /usr/share/units/definitions.units)

  • apg: generates random passwords

  • xz: high-ratio file compression

  • ldd: dynamic library info

  • nm: symbols from object files

  • ab or wrk: benchmarking web servers

  • strace: system call debugging

  • mtr: better traceroute for network debugging

  • cssh: visual concurrent shell

  • rsync: sync files and folders over SSH or in local file system

  • wireshark and tshark: packet capture and network debugging

  • ngrep: grep for the network layer

  • host and dig: DNS lookups

  • lsof: process file descriptor and socket info

  • dstat: useful system stats

  • glances: high level, multi-subsystem overview

  • iostat: Disk usage stats

  • mpstat: CPU usage stats

  • vmstat: Memory usage stats

  • htop: improved version of top

  • last: login history

  • w: who's logged on

  • id: user/group identity info

  • sar: historic system stats

  • iftop or nethogs: network utilization by socket or process

  • ss: socket statistics

  • dmesg: boot and system error messages

  • sysctl: view and configure Linux kernel parameters at run time

  • hdparm: SATA/ATA disk manipulation/performance

  • lsblk: list block devices: a tree view of your disks and disk partitions

  • lshw, lscpu, lspci, lsusb, dmidecode: hardware information, including CPU, BIOS, RAID, graphics, devices, etc.

  • lsmod and modinfo: List and show details of kernel modules.

  • fortune, ddate, and sl: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful"

OS X only

These are items relevant only on OS X.

  • Package management with brew (Homebrew) and/or port (MacPorts). These can be used to install on OS X many of the above commands.

  • Copy output of any command to a desktop app with pbcopy and paste input from one with pbpaste.

  • To enable the Option key in OS X Terminal as an alt key (such as used in the commands above like alt-b, alt-f, etc.), open Preferences -> Profiles -> Keyboard and select "Use Option as Meta key".

  • To open a file with a desktop app, use open or open -a /Applications/Whatever.app.

  • Spotlight: Search files with mdfind and list metadata (such as photo EXIF info) with mdls.

  • Be aware OS X is based on BSD Unix, and many commands (for example ps, ls, tail, awk, sed) have many subtle variations from Linux, which is largely influenced by System V-style Unix and GNU tools. You can often tell the difference by noting a man page has the heading "BSD General Commands Manual." In some cases GNU versions can be installed, too (such as gawk and gsed for GNU awk and sed). If writing cross-platform Bash scripts, avoid such commands (for example, consider Python or perl) or test carefully.

  • To get OS X release information, use sw_vers.

Windows only

These items are relevant only on Windows.

Ways to obtain Unix tools under Windows

  • Access the power of the Unix shell under Microsoft Windows by installing Cygwin. Most of the things described in this document will work out of the box.

  • On Windows 10, you can use Windows Subsystem for Linux (WSL), which provides a familiar Bash environment with Unix command line utilities.

  • If you mainly want to use GNU developer tools (such as GCC) on Windows, consider MinGW and its MSYS package, which provides utilities such as bash, gawk, make and grep. MSYS doesn't have all the features compared to Cygwin. MinGW is particularly useful for creating native Windows ports of Unix tools.

  • Another option to get Unix look and feel under Windows is Cash. Note that only very few Unix commands and command-line options are available in this environment.

Useful Windows command-line tools

  • You can perform and script most Windows system administration tasks from the command line by learning and using wmic.

  • Native command-line Windows networking tools you may find useful include ping, ipconfig, tracert, and netstat.

  • You can perform many useful Windows tasks by invoking the Rundll32 command.

Cygwin tips and tricks

  • Install additional Unix programs with the Cygwin's package manager.

  • Use mintty as your command-line window.

  • Access the Windows clipboard through /dev/clipboard.

  • Run cygstart to open an arbitrary file through its registered application.

  • Access the Windows registry with regtool.

  • Note that a C:\ Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:\cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath. This is most useful in scripts that invoke Windows programs.

More resources

Disclaimer

With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)

License

Creative Commons License

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - google/material-design-icons: Material Design icons by Google
Skip to content
CSS HTML JavaScript
Latest commit 224895a Jan 11, 2018
jestelle committed Jan 11, 2018 Merge pull request #689 from genome21/patch-1
Update README.md with grammar changes.
Permalink
Failed to load latest commit information.
action Add Contents.json for all iOS .imageset directories. Jul 12, 2017
alert Add Contents.json for all iOS .imageset directories. Jul 12, 2017
av Add Contents.json for all iOS .imageset directories. Jul 12, 2017
communication Add Contents.json for all iOS .imageset directories. Jul 12, 2017
content Add Contents.json for all iOS .imageset directories. Jul 12, 2017
device Icons and sprite sheets updated. Nov 17, 2015
editor Add Contents.json for all iOS .imageset directories. Jul 12, 2017
file Add Contents.json for all iOS .imageset directories. Jul 12, 2017
hardware Add Contents.json for all iOS .imageset directories. Jul 12, 2017
iconfont Removes width and height from icon font CSS. Mar 21, 2016
image Add Contents.json for all iOS .imageset directories. Jul 12, 2017
maps Add Contents.json for all iOS .imageset directories. Jul 12, 2017
navigation Add Contents.json for all iOS .imageset directories. Jul 12, 2017
notification Add Contents.json for all iOS .imageset directories. Jul 12, 2017
places Add Contents.json for all iOS .imageset directories. Jul 12, 2017
social Add Contents.json for all iOS .imageset directories. Jul 12, 2017
sprites Adds device symbol sprites. Sep 1, 2016
toggle Icons and sprite sheets updated. Nov 17, 2015
.babelrc Introduced a Gulpfile for the generation of derived files. Nov 13, 2015
.gitignore Introduced a Gulpfile for the generation of derived files. Nov 13, 2015
LICENSE License change to Apache 2.0. Aug 25, 2016
README.md Update README.md with grammar changes. Oct 19, 2017
bower.json License change to Apache 2.0. Sep 1, 2016
gulpfile.babel.js Added missing icon category for Gulp file May 31, 2016
index.js [fixed] STATIC_PATH Dec 31, 2015
package.json 3.0.1 release Sep 2, 2016

README.md

Material design icons

Material design icons is the official icon set from Google. The icons are designed under the material design guidelines.

3.0.1 Update

  • Changed license in package.json.
  • Added missing device symbol sprites.

3.0.0 Update

License change to Apache 2.0!

Getting Started

Read the developer guide on how to use the material design icons in your project.

Using a font collection

The iconfont folder contains pre-generated font files that can be included in a project. This is especially convenient for the web; however, it is generally better to link to the web font hosted on Google Fonts:

<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
      rel="stylesheet">

Read more in the font portion of our full developer guide.

Using symbols and sprites

The css-sprite and svg-sprite folders contain pre-generated sprite sheets, as well as svg symbols that can be <use>d more directly and with fewer constraints. Instructions for using them are in the sprites documentation.

Polymer icons

If you wish to use the icon set with Polymer, we recommend consuming them via the <iron-icons> element (<core-icons> in v0.5).

License

We have made these icons available for you to incorporate into your products under the Apache License Version 2.0. Feel free to remix and re-share these icons and documentation in your products. We'd love attribution in your app's about screen, but it's not required. The only thing we ask is that you not re-sell these icons.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - toddmotto/public-apis: A collective list of public JSON APIs for use in web development.
Skip to content
A collective list of public JSON APIs for use in web development.
Python Shell
Switch branches/tags
Nothing to show
Latest commit d96e396 Feb 13, 2018

README.md

Public APIs Build Status

A collective list of free APIs for use in web development.

A public API for this project can be found here - thanks to DigitalOcean for helping us provide this service!

For information on contributing to this project, please see the contributing guide.

Please note a passing build status indicates all listed APIs are available since the last update. A failing build status indicates that 1 or more services may be unavailable at the moment.

Index

Animals

API Description Auth HTTPS CORS Link
Dogs Based on the Stanford Dogs Dataset No Yes Unknown Go!
HTTPCat Cat for every HTTP Status No Yes Unknown Go!
IUCN IUCN Red List of Threatened Species apiKey No Unknown Go!
Movebank Movement and Migration data of animals No Yes Unknown Go!
Petfinder Adoption apiKey Yes Unknown Go!
RescueGroups Adoption No Yes Unknown Go!

Anime

API Description Auth HTTPS CORS Link
AniList Anime discovery & tracking OAuth Yes Unknown Go!
Jikan Unofficial MyAnimeList API No Yes Unknown Go!
Kitsu Anime discovery platform OAuth Yes Unknown Go!
Studio Ghibli Resources from Studio Ghibli films No Yes Unknown Go!

Anti-Malware

API Description Auth HTTPS CORS Link
AlienVault Open Threat Exchange (OTX) IP/domain/URL reputation apiKey Yes Unknown Go!
Certly Certly Link/Domain Flagging apiKey Yes Unknown Go!
Google Safe Browsing Google Link/Domain Flagging apiKey Yes Unknown Go!
Metacert Metacert Link Flagging apiKey Yes Unknown Go!
VirusTotal VirusTotal File/URL Analysis apiKey Yes Unknown Go!
Web Of Trust (WOT) Website reputation apiKey Yes Unknown Go!

Art & Design

API Description Auth HTTPS CORS Link
Behance Design apiKey Yes Unknown Go!
Cooper Hewitt Smithsonian Design Museum apiKey Yes Unknown Go!
Dribbble Design OAuth No Unknown Go!
Harvard Art Museums Art apiKey No Unknown Go!
Iconfinder Icons apiKey Yes Unknown Go!
Icons8 Icons OAuth Yes Unknown Go!
Noun Project Icons OAuth No Unknown Go!
Rijksmuseum Art apiKey Yes Unknown Go!

Books

API Description Auth HTTPS CORS Link
BookNomads Books published in the Netherlands and Flanders (about 2.5 million), book covers, and related data No Yes Unknown Go!
British National Bibliography Books No No Unknown Go!
Goodreads Books apiKey Yes Unknown Go!
Google Books Books OAuth Yes Unknown Go!
Open Library Books, book covers, and related data No Yes Unknown Go!

Business

API Description Auth HTTPS CORS Link
Charity Search Non-profit charity data apiKey No Unknown Go!
Clearbit Logo Search for company logos and embed them in your projects No Yes Unknown Go!
Domainsdb.info Registered Domain Names Search No Yes Unknown Go!
Gmail Flexible, RESTful access to the user's inbox OAuth Yes Unknown Go!
Google Analytics Collect, configure, and analyze your data to reach the right audience OAuth Yes Unknown Go!
mailgun Email Service apiKey Yes Unknown Go!
markerapi Trademark Search No No Unknown Go!
Trello Boards, lists, and cards to help you organize and prioritize your projects OAuth Yes Unknown Go!

Calendar

API Description Auth HTTPS CORS Link
Church Calendar Catholic liturgical calendar No No Unknown Go!
Czech and Slovak Namedays Calendar Lookup for a date and returns nameday No Yes Unknown Go!
Czech Namedays Calendar Lookup for a name and returns nameday date No No Unknown Go!
Google Calendar Display, create and modify Google calendar events OAuth Yes Unknown Go!
Hebrew Calendar Convert between Gregarian and Hebrew, fetch Shabbat and Holiday times, etc No No Unknown Go!
Holidays Historical data regarding holidays apiKey Yes Unknown Go!
LectServe Protestant liturgical calendar No No Unknown Go!
Non-Working Days Database of ICS files for non working days No Yes Unknown Go!

Cloud Storage & File Sharing

API Description Auth HTTPS CORS Link
Box File Sharing and Storage OAuth Yes Unknown Go!
Dropbox File Sharing and Storage OAuth Yes Unknown Go!
Google Drive File Sharing and Storage OAuth Yes Unknown Go!
OneDrive File Sharing and Storage OAuth Yes Unknown Go!
Pastebin Plain Text Storage apiKey Yes Unknown Go!

Continuous Integration

API Description Auth HTTPS CORS Link
CircleCI Automate the software development process using continuous integration and continuous delivery apiKey Yes Unknown Go!
Codeship Codeship is a Continuous Integration Platform in the cloud apiKey Yes Unknown Go!
Travis CI Sync your GitHub projects with Travis CI to test your code in minutes apiKey Yes Unknown Go!

Cryptocurrency

API Description Auth HTTPS CORS Link
Binance Exchange for Trading Cryptocurrencies based in China apiKey Yes Unknown Go!
BitcoinCharts Financial and Technical Data related to the Bitcoin Network No Yes Unknown Go!
Bitfinex Cryptocurrency Trading Platform apiKey Yes Unknown Go!
Bitmex Real-Time Cryptocurrency derivatives trading platform based in Hong Kong apiKey Yes Unknown Go!
Bittrex Next Generation Crypto Trading Platform apiKey Yes Unknown Go!
Block Bitcoin Payment, Wallet & Transaction Data apiKey Yes Unknown Go!
Blockchain Bitcoin Payment, Wallet & Transaction Data No Yes Unknown Go!
CoinAPI All Currency Exchanges integrate under a single api apiKey Yes No Go!
Coinbase Bitcoin, Litecoin and Ethereum Prices apiKey Yes Unknown Go!
CoinBin Cryptocurrency information No Yes Unknown Go!
CoinDesk Bitcoin Price Index No No Unknown Go!
CoinMarketCap Cryptocurrencies Prices No Yes Unknown Go!
CryptoCompare Cryptocurrencies Comparison No Yes Unknown Go!
Cryptonator Cryptocurrencies Exchange Rates No Yes Unknown Go!
GDAX Cryptocurrency Trading Platform apiKey Yes Unknown Go!
MercadoBitcoin Brazilian Cryptocurrency Information No Yes Unknown Go!
Nexchange Automated cryptocurrency exchange service No No Yes Go!
Poloniex US based digital asset exchange apiKey Yes Unknown Go!

Currency Exchange

API Description Auth HTTPS CORS Link
1Forge Forex currency market data apiKey Yes Unknown Go!
Currencylayer Exchange rates and currency conversion apiKey Yes Unknown Go!
Czech National Bank A collection of exchange rates No Yes Unknown Go!
Fixer.io Exchange rates and currency conversion No Yes Unknown Go!
LabStack Accurate and reliable live currency exchange rates for over 150 symbols apiKey Yes Yes Go!

Data Validation

API Description Auth HTTPS CORS Link
LabStack Check email address for syntax error, disposable mail server and valid SMTP mailbox apiKey Yes Yes Go!
languagelayer Language detection No Yes Unknown Go!
Lob.com US Address Verification apiKey Yes Unknown Go!
mailboxlayer Email address validation No Yes Unknown Go!
MailTest Email address validation No Yes Unknown Go!
NumValidate Open Source phone number validation No Yes Unknown Go!
numverify Phone number validation No Yes Unknown Go!
PurgoMalum Content validator against profanity & obscenity No No Unknown Go!
vatlayer VAT number validation No Yes Unknown Go!

Development

API Description Auth HTTPS CORS Link
ApiLeap Make screenshots from web pages and HTML apiKey Yes Unknown Go!
APIs.guru Wikipedia for Web APIs, OpenAPI/Swagger specs for public APIs No Yes Unknown Go!
BetterMeta Return a site's meta tags in JSON format X-Mashape-Key Yes Unknown Go!
Bitbucket Pull public information for a Bitbucket account No Yes Unknown Go!
Browshot Easily make screenshots of web pages in any screen size, as any device apiKey Yes Unknown Go!
CDNJS Library info on CDNJS No Yes Unknown Go!
Changelogs.md Structured changelog metadata from open source projects No Yes Unknown Go!
Count.io Persistent counting and A/B testing No Yes Unknown Go!
DigitalOcean Status Status of all DigitalOcean services No Yes Unknown Go!
DomainDb Info Domain name search to find all domains containing particular words/phrases/etc No Yes Unknown Go!
Faceplusplus A tool to detect face OAuth Yes Unknown Go!
Genderize.io Determines a gender from a first name No Yes Unknown Go!
Github Information for a user's Github profile No Yes Unknown Go!
Gitter Chat for GitHub OAuth Yes Unknown Go!
HTTP2.Pro Test endpoints for client and server HTTP/2 protocol support No Yes Unknown Go!
import.io Retrieve structured data from a website or RSS feed apiKey Yes Unknown Go!
IPify A simple IP Address API No Yes Unknown Go!
IPinfo Another simple IP Address API No Yes Unknown Go!
JSON 2 JSONP Convert JSON to JSONP (on-the-fly) for easy cross-domain data requests using client-side JavaScript No Yes Unknown Go!
JSONbin.io Free JSON storage service. Ideal for small scale Web apps, Websites and Mobile apps apiKey Yes Unknown Go!
Judge0 Compile and run source code No Yes Unknown Go!
Kairos Face Recognition and Emotion Analysis apiKey Yes Unknown Go!
Let's Validate Uncovers the technologies used on websites and URL to thumbnail No Yes Unknown Go!
LiveEdu Live Coding Streaming OAuth Yes Unknown Go!
Myjson A simple JSON store for your web or mobile app No No Unknown Go!
Plino Spam filtering system No Yes Unknown Go!
Public APIs A collective list of free JSON APIs for use in web development No Yes Unknown Go!
QR code Generate and decode / read QR code graphics No Yes Unknown Go!
ReqRes A hosted REST-API ready to respond to your AJAX requests No Yes Unknown Go!
Scrape Website Email Grabs email addresses from a URL X-Mashape-Key Yes Unknown Go!
SHOUTCLOUD ALL-CAPS AS A SERVICE No No Unknown Go!
StackExchange Q&A forum for developers OAuth Yes Unknown Go!
Verse Check what's the latest version of your favorite open-source project No Yes Unknown Go!
XML to JSON Integration developer utility APIs No Yes Unknown Go!

Dictionaries

API Description Auth HTTPS CORS Link
Oxford Dictionary Data apiKey Yes Unknown Go!
Wordnik Dictionary Data No No Unknown Go!
Words Definitions and synonyms for more than 150,000 words apiKey Yes Unknown Go!

Documents & Productivity

API Description Auth HTTPS CORS Link
File.io File Sharing No Yes Unknown Go!
Mercury Web parser apiKey Yes Unknown Go!
pdflayer HTML/URL to PDF No Yes Unknown Go!
Pocket Bookmarking service OAuth Yes Unknown Go!
PrexView Data from XML or JSON to PDF, HTML or Image apiKey Yes Unknown Go!
Restpack Provides screenshot, HTML to PDF, and content extraction APIs apiKey Yes Unknown Go!
Todoist Todo Lists OAuth Yes Unknown Go!
Vector Express Free vector file converting API No No Yes Go!
Wunderlist Todo Lists OAuth Yes Unknown Go!

Environment

API Description Auth HTTPS CORS Link
AirVisual Air quality and weather data apiKey Yes Unknown Go!
OpenAQ Open air quality data apiKey Yes Unknown Go!
PM2.5.in Air quality of China apiKey No Unknown Go!
PVWatts Energy production photovoltaic (PV) energy systems apiKey Yes Unknown Go!
UK Carbon Intensity The Official Carbon Intensity API for Great Britain developed by National Grid No Yes Unknown Go!

Events

API Description Auth HTTPS CORS Link
Eventbrite Find events OAuth Yes Unknown Go!
Picatic Sell tickets anywhere apiKey Yes Unknown Go!
Ticketmaster Search events, attractions, or venues apiKey Yes Unknown Go!

Finance

API Description Auth HTTPS CORS Link
Alpha Vantage Realtime and historical stock data apiKey Yes Unknown Go!
Barchart OnDemand Stock, Futures, and Forex Market Data apiKey Yes Unknown Go!
Consumer Financial Protection Bureau Financial services consumer complaint data apiKey Yes Unknown Go!
IEX Stocks and Market Data No Yes Unknown Go!
IG Spreadbetting and CFD Market Data apiKey Yes Unknown Go!
Plaid Connect with users’ bank accounts and access transaction data apiKey Yes Unknown Go!
Razorpay IFSC Indian Financial Systems Code (Bank Branch Codes) No Yes Unknown Go!
RoutingNumbers.info ACH/NACHA Bank Routing Numbers No Yes Unknown Go!
VAT Rates A collection of all VAT rates for EU countries No Yes Unknown Go!

Food & Drink

API Description Auth HTTPS CORS Link
BigOven Recipe Search X-Mashape-Key No Unknown Go!
BreweryDB Beer apiKey No Unknown Go!
Edamam Recipe Search apiKey Yes Unknown Go!
Food2Fork Recipe Search apiKey No Unknown Go!
LCBO Alcohol apiKey Yes Unknown Go!
Open Food Facts Food Products Database No Yes Unknown Go!
PunkAPI Brewdog Beer Recipes No Yes Unknown Go!
Recipe Puppy Food No No Unknown Go!
TacoFancy Community-driven taco database No No Unknown Go!
The Report of the Week Food & Drink Reviews No Yes Unknown Go!
TheCocktailDB Cocktail Recipes apiKey No Unknown Go!
TheMealDB Meal Recipes apiKey No Unknown Go!
What's on the menu? NYPL human-transcribed historical menu collection apiKey No Unknown Go!
Yummly Find food recipes apiKey Yes Unknown Go!
Zomato Discover restaurants apiKey Yes Unknown Go!

Fraud Prevention

API Description Auth HTTPS CORS Link
Whitepages Pro Global identity verification with phone, address, email, and IP apiKey Yes Unknown Go!
Whitepages Pro Phone reputation to detect spammy phones apiKey Yes Unknown Go!
Whitepages Pro Get an owner’s name, address, demographics based on the phone number apiKey Yes Unknown Go!
Whitepages Pro Phone number validation, line_type, carrier append apiKey Yes Unknown Go!
Whitepages Pro Get normalized physical address, residents, address type, and validity apiKey Yes Unknown Go!

Games & Comics

API Description Auth HTTPS CORS Link
Battle.net Blizzard Entertainment apiKey Yes Unknown Go!
Battlefield 4 Battlefield 4 Information No Yes Unknown Go!
Chuck Norris Database Jokes No No Unknown Go!
Clash of Clans Clash of Clans Game Information No Yes Unknown Go!
Clash Royale Clash Royale Game Information No Yes Unknown Go!
Comic Vine Comics No Yes Unknown Go!
Deck of Cards Deck of Cards No No Unknown Go!
Destiny The Game Bungie Platform API apiKey Yes Unknown Go!
Dota 2 Provides information about Player stats , Match stats, Rankings for Dota 2 No Yes Unknown Go!
Eve Online Third-Party Developer Documentation OAuth Yes Unknown Go!
Games Minecraft and other server info & user info) No Yes Unknown Go!
Giant Bomb Video Games No Yes Unknown Go!
Guild Wars 2 Guild Wars 2 Game Information apiKey Yes Unknown Go!
Halo Halo 5 and Halo Wars 2 Information apiKey Yes Unknown Go!
Hearthstone Hearthstone Cards Information X-Mashape-Key Yes Unknown Go!
IGDB.com Video Game Database apiKey Yes Unknown Go!
Jokes Programming and general jokes No Yes Unknown Go!
Jservice Jeopardy Question Database No No Unknown Go!
Magic The Gathering Magic The Gathering Game Information No No Unknown Go!
Marvel Marvel Comics apiKey No Unknown Go!
Open Trivia Trivia Questions No Yes Unknown Go!
PandaScore E-sports games and results apiKey Yes Unknown Go!
PlayerUnknown's Battlegrounds PUBG Stats apiKey Yes Unknown Go!
Pokéapi Pokémon Information No Yes Unknown Go!
Pokémon TCG Pokémon TCG Information No Yes Unknown Go!
Qriusity Quiz/Trivia Questions No Yes Unknown Go!
Riot Games League of Legends Game Information apiKey Yes Unknown Go!
Steam Steam Client Interaction OAuth Yes Unknown Go!
xkcd Retrieve xkcd comics as JSON No Yes Unknown Go!

Geocoding

API Description Auth HTTPS CORS Link
adresse.data.gouv.fr Address database of France, geocoding, and reverse No Yes Unknown Go!
Battuta A (country/region/city) in-cascade location API apiKey Yes Unknown Go!
Bing Maps Create/customize digital maps based on Bing Maps data apiKey Yes Unknown Go!
City Context Crime, school, and transportation data for US cities apiKey Yes Unknown Go!
CitySDK Open APIs for select European cities No Yes Unknown Go!
Daum Maps Daum Maps provide multiple APIs for Korean maps apiKey No Unknown Go!
FreeGeoIP Geolocation of IP addresses No Yes Unknown Go!
GeoApi French geographical data No Yes Unknown Go!
Geocode.xyz Provides worldwide forward/reverse geocoding, batch geocoding and geoparsing No Yes Unknown Go!
GeoNames Place names and other geographical data No No Unknown Go!
Google Earth Engine A cloud-based platform for planetary-scale environmental data analysis apiKey Yes Unknown Go!
Google Maps Create/customize digital maps based on Google Maps data apiKey Yes Unknown Go!
GraphLoc Free GraphQL IP Geolocation API No Yes Unknown Go!
HelloSalut Get hello translation following user language No Yes Unknown Go!
IP 2 Country Map an IP to a country No Yes Unknown Go!
IP Address Details Find geolocation with ip address No Yes Unknown Go!
IP Location Find IP address location information No Yes Unknown Go!
IP Sidekick Geolocation API that returns extra information about an IP address apiKey Yes Unknown Go!
IP Vigilante Free IP Geolocation API No Yes Unknown Go!
LabStack Find IP to location, location to latitude-longitude and reverse apiKey Yes Yes Go!
Mapbox Create/customize beautiful digital maps apiKey Yes Unknown Go!
Mexico Mexico RESTful zip codes API No Yes Unknown Go!
One Map, Singapore Singapore Land Authority REST API services for Singapore addresses apiKey Yes Unknown Go!
OnWater Determine if a lat/lon is on water or land No Yes Unknown Go!
OpenCage Forward and reverse geocoding using open data No Yes Unknown Go!
OpenStreetMap Navigation, geolocation and geographical data OAuth No Unknown Go!
PostcodeData.nl Provide geolocation data based on postcode for Dutch addresses No No Unknown Go!
Postcodes.io Postcode lookup & Geolocation for the UK No Yes Unknown Go!
REST Countries Get information about countries via a RESTful API No Yes Unknown Go!
Uebermaps Discover and share maps with friends apiKey Yes Unknown Go!
Utah AGRC Utah Web API for geocoding Utah addresses apiKey Yes Unknown Go!
ViaCep Brazil RESTful zip codes API No Yes Unknown Go!
Zippopotam Get information about place such as country, city, state, etc No No Unknown Go!

Government

API Description Auth HTTPS CORS Link
BCLaws Access to the laws of British Columbia No No Unknown Go!
BusinessUSA Authoritative information on U.S. programs, events, services and more apiKey Yes Unknown Go!
Census.gov The US Census Bureau provides various APIs and data sets on demographics and businesses No Yes Unknown Go!
EPA Web services and data sets from the US Environmental Protection Agency No Yes Unknown Go!
FEC Information on campaign donations in federal elections apiKey Yes Unknown Go!
Food Standards Agency UK food hygiene rating data API No No Unknown Go!
Regulations.gov Federal regulatory materialsto increase understanding of the Federal rule making process apiKey Yes Unknown Go!

Health

API Description Auth HTTPS CORS Link
BetterDoctor Detailed information about doctors in your area apiKey Yes Unknown Go!
Diabetes Logging and retrieving diabetes information No No Unknown Go!
Flutrack Influenza-like symptoms with geotracking No No Unknown Go!
Healthcare.gov Educational content about the US Health Insurance Marketplace No Yes Unknown Go!
Lexigram NLP that extracts mentions of clinical concepts from text, gives access to clinical ontology apiKey Yes Unknown Go!
Makeup Makeup Information No No Unknown Go!
Medicare Access to the data from the CMS - medicare.gov No Yes Unknown Go!
NPPES National Plan & Provider Enumeration System, info on healthcare providers registered in US No Yes Unknown Go!
Nutritionix Worlds largest verified nutrition database apiKey Yes Unknown Go!
openFDA Public FDA data about drugs, devices, and foods No Yes Unknown Go!
USDA Nutrients National Nutrient Database for Standard Reference No Yes Unknown Go!

Jobs

API Description Auth HTTPS CORS Link
Adzuna Job board aggregator apiKey Yes Unknown Go!
Authentic Jobs Job board for designers, hackers, and creative pros apiKey Yes Unknown Go!
Careerjet Job search engine apiKey No Unknown Go!
Github Jobs Jobs for software developers No Yes Unknown Go!
Indeed Job board aggregator apiKey Yes Unknown Go!
Jobs2Careers Job aggregator apiKey Yes Unknown Go!
Jooble Job search engine apiKey Yes Unknown Go!
Juju Job search engine apiKey No Unknown Go!
Open Skills Job titles, skills, and related jobs data No No Unknown Go!
Reed Job board aggregator apiKey Yes Unknown Go!
Search.gov Jobs Tap into a list of current jobs openings with the United States government No Yes Unknown Go!
The Muse Job board and company profiles apiKey Yes Unknown Go!
Upwork Freelance job board and management system OAuth Yes Unknown Go!
USAJOBS US government job board apiKey Yes Unknown Go!
ZipRecruiter Job search app and website apiKey Yes Unknown Go!

Machine Learning

API Description Auth HTTPS CORS Link
Clarifai Computer Vision OAuth Yes Unknown Go!
Cleverbot Web chat bot apiKey Yes Unknown Go!
Dialogflow Natural Language Processing apiKey Yes Unknown Go!
Keen IO Data Analytics apiKey Yes Unknown Go!
Unplugg Forecasting API for timeseries data apiKey Yes Unknown Go!
Wit.ai Natural Language Processing OAuth Yes Unknown Go!

Music

API Description Auth HTTPS CORS Link
Bandsintown Music Events No Yes Unknown Go!
Deezer Music OAuth Yes Unknown Go!
Discogs Music OAuth Yes Unknown Go!
Genius Crowdsourced lyrics and music knowledge OAuth Yes Unknown Go!
iTunes Search Software products No Yes Unknown Go!
Jamendo Music OAuth Yes Unknown Go!
LastFm Music apiKey Yes Unknown Go!
Lyrics.ovh Simple API to retrieve the lyrics of a song No Yes Unknown Go!
Mixcloud Music OAuth Yes Unknown Go!
MusicBrainz Music No Yes Unknown Go!
Musikki Music apiKey Yes Unknown Go!
Musixmatch Music apiKey Yes Unknown Go!
Songkick Music Events OAuth Yes Unknown Go!
Songsterr Provides guitar, bass and drums tabs and chords No Yes Unknown Go!
Spotify View Spotify music catalog, manage users' libraries, get recommendations, and more OAuth Yes Unknown Go!
TasteDive Similar artist API (also works for movies and TV shows) apiKey Yes Unknown Go!
TheAudioDB Music apiKey No Unknown Go!
Vagalume Crowdsourced lyrics and music knowledge apiKey Yes Unknown Go!

News

API Description Auth HTTPS CORS Link
Chronicling America Provides access to millions of pages of historic US newspapers from the Library of Congress No No Unknown Go!
Feedbin RSS reader OAuth Yes Unknown Go!
New York Times Provides news apiKey Yes Unknown Go!
News Headlines currently published on a range of news sources and blogs apiKey Yes Unknown Go!
NPR One Personalized news listening experience from NPR OAuth Yes Unknown Go!
The Guardian Access all the content the Guardian creates, categorised by tags and section apiKey Yes Unknown Go!

Open Data

API Description Auth HTTPS CORS Link
18F US Federal Government /Developer Program No No Unknown Go!
Abbreviation Get abbreviations and meanings X-Mashape-Key Yes Unknown Go!
Callook.info United States ham radio callsigns No Yes Unknown Go!
CARTO Location Information Prediction apiKey Yes Unknown Go!
Celebinfo Celebrity information X-Mashape-Key Yes Unknown Go!
Colorado Data Engine Formatted and geolocated Colorado public data No Yes Unknown Go!
Colorado Information Marketplace Colorado State Government Open Data No Yes Unknown Go!
Data USA US Public Data No Yes Unknown Go!
Datakick The open product database apiKey Yes Unknown Go!
Dronestream Tracks United States drone strikes No Yes Unknown Go!
Federal Register The Daily Journal of the United States Government No Yes Unknown Go!
fonoApi Mobile Device Description No Yes Unknown Go!
French Address Search French Government No Yes Unknown Go!
INQStats Open demographic data such as population, life expectancy, migration rate, etc apiKey No Unknown Go!
LinkPreview Get JSON formatted summary with title, description and preview image for any requested URL apiKey Yes Yes Go!
Marijuana Strains Marijuana strains, races, flavors, and effects apiKey No Unknown Go!
Microlink.io Turns any link into information No Yes Unknown Go!
Open Government, Australia Australian Government Open Data No Yes Unknown Go!
Open Government, Canada Canadian Government Open Data No No Unknown Go!
Open Government, France French Government Open Data apiKey Yes Unknown Go!
Open Government, India Indian Government Open Data apiKey Yes Unknown Go!
Open Government, New Zealand New Zealand Government Open Data No Yes Unknown Go!
Open Government, Taiwan Taiwan Government Open Data No Yes Unknown Go!
Open Government, USA United States Government Open Data No Yes Unknown Go!
Prague Opendata Prague City Open Data No No Unknown Go!
Quandl Stock Market Data No Yes Unknown Go!
Represent by Open North Find Canadian Government Representatives No Yes Unknown Go!
Scoop.it Content Curation Service apiKey No Unknown Go!
Teleport Quality of Life Data No Yes Unknown Go!
Universities List University names, countries and domains No Yes Unknown Go!
UPC database More than 1.5 million barcode numbers from all around the world apiKey Yes Unknown Go!
Wikidata Collaboratively edited knowledge base operated by the Wikimedia Foundation OAuth Yes Unknown Go!
Wikipedia Mediawiki Encyclopedia No Yes Unknown Go!
Yelp Find Local Business OAuth Yes Unknown Go!

Open Source Projects

API Description Auth HTTPS CORS Link
Countly Countly web analytics No No Unknown Go!
Drupal.org Drupal.org No Yes Unknown Go!
Libraries.io Open source software libraries apiKey Yes Unknown Go!

Patent

API Description Auth HTTPS CORS Link
EPO European patent search system api OAuth Yes Unknown Go!
TIPO Taiwan patent search system api apiKey Yes Unknown Go!
USPTO USA patent api services No Yes Unknown Go!

Personality

API Description Auth HTTPS CORS Link
chucknorris.io JSON API for hand curated Chuck Norris jokes No Yes Unknown Go!
FavQs.com FavQs allows you to collect, discover, and share your favorite quotes apiKey Yes Unknown Go!
Forismatic Inspirational Quotes No No Unknown Go!
icanhazdadjoke The largest selection of dad jokes on the internet No Yes Unknown Go!
Medium Community of readers and writers offering unique perspectives on ideas OAuth Yes Unknown Go!
Quotes on Design Inspirational Quotes No Yes Unknown Go!
Traitify Assess, collect, and analyze Personality No Yes Unknown Go!
tronalddump.io Api & web archive for the things Donald Trump has said No Yes Unknown Go!

Photography

API Description Auth HTTPS CORS Link
500px Photography Community OAuth Yes Unknown Go!
Flickr Flickr Services OAuth Yes Unknown Go!
Getty Images Build applications using the world's most powerful imagery OAuth Yes Unknown Go!
Gfycat Jiffier GIFs OAuth Yes Unknown Go!
Giphy Get all your gifs apiKey Yes Unknown Go!
Gyazo Upload images apiKey Yes Unknown Go!
Imgur Images OAuth Yes Unknown Go!
Pixabay Photography apiKey Yes Unknown Go!
Pixhost Upload images, photos, galleries No Yes Unknown Go!
PlaceKitten Resizable kitten placeholder images No Yes Unknown Go!
ScreenShotLayer URL 2 Image No Yes Unknown Go!
Unsplash Photography OAuth Yes Unknown Go!

Science & Math

API Description Auth HTTPS CORS Link
arcsecond.io Multiple astronomy data sources No Yes Unknown Go!
CORE Access the world's Open Access research papers apiKey Yes Unknown Go!
inspirehep.net High Energy Physics info. system No Yes Unknown Go!
Launch Library Upcoming Space Launches No Yes Unknown Go!
Minor Planet Center Asterank.com Information No No Unknown Go!
NASA NASA data, including imagery No Yes Unknown Go!
Newton Symbolic and Arithmetic Math Calculator No Yes Unknown Go!
Numbers Facts about numbers No No Unknown Go!
Open Notify ISS astronauts, current location, etc No No Unknown Go!
Open Science Framework Repository and archive for study designs, research materials, data, manuscripts, etc No Yes Unknown Go!
SHARE A free, open, dataset about research and scholarly activities No Yes Unknown Go!
SpaceX Company, vehicle, launchpad and launch data No Yes Unknown Go!
Sunrise and Sunset Sunset and sunrise times for a given latitude and longitude No Yes Unknown Go!
USGS Earthquake Hazards Program Earthquakes data real-time No Yes Unknown Go!
USGS Water Services Water quality and level info for rivers and lakes No Yes Unknown Go!
World Bank World Data No No Unknown Go!

Security

API Description Auth HTTPS CORS Link
AXFR Database AXFR public database No No Unknown Go!
HaveIBeenPwned Passwords which have previously been exposed in data breaches No Yes Unknown Go!
UK Police UK Police data No Yes Unknown Go!

Shopping

API Description Auth HTTPS CORS Link
Best Buy Products, Buying Options, Categories, Recommendations, Stores, and Commerce apiKey Yes Unknown Go!
eBay Sell and Buy on eBay OAuth Yes Unknown Go!
Wal-Mart Item price and availability apiKey Yes Unknown Go!

Social

API Description Auth HTTPS CORS Link
Buffer Access to pending and sent updates in Buffer OAuth Yes Unknown Go!
Cisco Spark Team Collaboration Software OAuth Yes Unknown Go!
Discord Make bots for Discord, integrate Discord onto an external platform OAuth Yes Unknown Go!
Disqus Communicate with Disqus data OAuth Yes Unknown Go!
DonReach Social Count Get the social share count of a URL from every major social network No Yes Unknown Go!
Facebook Facebook Login, Share on FB, Social Plugins, Analytics and more OAuth Yes Unknown Go!
Foursquare Interact with Foursquare users and places (geolocation-based checkins, photos, tips, events, etc) OAuth Yes Unknown Go!
Fuck Off as a Service Asks someone to fuck off No Yes Unknown Go!
Full Contact Get Social Media profiles and contact Information OAuth Yes Unknown Go!
HackerNews Social news for CS and entrepreneurship No Yes Unknown Go!
Instagram Instagram Login, Share on Instagram, Social Plugins and more OAuth Yes Unknown Go!
LinkedIn The foundation of all digital integrations with LinkedIn OAuth Yes Unknown Go!
Meetup.com Data about Meetups from Meetup.com apiKey Yes Unknown Go!
Pinterest The world's catalog of ideas OAuth Yes Unknown Go!
PWRTelegram bot Boosted version of the Telegram bot API OAuth Yes Unknown Go!
Reddit Homepage of the internet OAuth Yes Unknown Go!
SharedCount Social media like and share data for any URL apiKey Yes Unknown Go!
Slack Team Instant Messaging OAuth Yes Unknown Go!
Telegram Bot Simplified HTTP version of the MTProto API for bots OAuth Yes Unknown Go!
Telegram MTProto Read and write Telegram data OAuth Yes Unknown Go!
Tumblr Read and write Tumblr Data OAuth Yes Unknown Go!
Twitch Game Streaming API OAuth Yes Unknown Go!
Twitter Read and write Twitter data OAuth Yes Unknown Go!
vk Read and write vk data OAuth Yes Unknown Go!

Sports & Fitness

API Description Auth HTTPS CORS Link
BikeWise Bikewise is a place to learn about and report bike crashes, hazards, and thefts No Yes Unknown Go!
Cartola FC The Cartola FC API serves to check the partial points of your team No Yes Unknown Go!
City Bikes City Bikes around the world No No Unknown Go!
Cricket Live Scores Live cricket scores X-Mashape-Key Yes Unknown Go!
Ergast F1 F1 data from the beginning of the world championships in 1950 No No Unknown Go!
Fitbit Fitbit Information OAuth Yes Unknown Go!
Football-Data.org Football Data No No Unknown Go!
JCDecaux Bike JCDecaux's self-service bicycles apiKey Yes Unknown Go!
NBA Stats Current and historical NBA Statistics No Yes Unknown Go!
NFL Arrests NFL Arrest Data No No Unknown Go!
Pro Motocross The RESTful AMA Pro Motocross lap times for every racer on the start gate No No Unknown Go!
Strava Connect with athletes, activities and more OAuth Yes Unknown Go!
SuredBits Query sports data, including teams, players, games, scores, and statistics No No Unknown Go!
TheSportsDB Crowd-Sourced Sports Data and Artwork apiKey No Unknown Go!
UFC Data Ultimate Fighting Championship information for events and fighters No No Unknown Go!
Wger Workout manager data as exercises, muscles or equipment apiKey Yes Unknown Go!

Test Data

API Description Auth HTTPS CORS Link
Adorable Avatars Generate random cartoon avatars No Yes Unknown Go!
Bacon Ipsum A Meatier Lorem Ipsum Generator No Yes Unknown Go!
FakeJSON Service to generate test and fake data apiKey Yes Yes Go!
FHIR Fast Healthcare Interoperability Resources test data No Yes Unknown Go!
Hipster Ipsum Generates Hipster Ipsum text No No Unknown Go!
JSONPlaceholder Fake data for testing and prototyping No No Unknown Go!
Lorem Text Generates Lorem Ipsum text X-Mashape-Key Yes Unknown Go!
LoremPicsum Generate placeholder pictures No No Unknown Go!
Loripsum The "lorem ipsum" generator that doesn't suck No No Unknown Go!
RandomUser Generates random user data No Yes Unknown Go!
RoboHash Generate random robot/alien avatars No Yes Unknown Go!
UI Names Generate random fake names No Yes Unknown Go!
Yes No Generate yes or no randomly No Yes Unknown Go!

Text Analysis

API Description Auth HTTPS CORS Link
Aylien Text Analysis A collection of information retrieval and natural language APIs apiKey Yes Unknown Go!
Detect Language Detects text language apiKey Yes Unknown Go!
Google Cloud Natural Natural language understanding technology, including sentiment, entity, and syntax analysis apiKey Yes Unknown Go!
Semantira Text Analytics with sentiment analysis, categorization & named entity extraction OAuth Yes Unknown Go!
Watson Natural Language Understanding Natural language processing for advanced text analysis OAuth Yes Unknown Go!

Tracking

API Description Auth HTTPS CORS Link
Postmon An API to query Brazilian ZIP codes and orders easily, quickly and free No No Unknown Go!
Sweden Provides information about parcels in transport apiKey No Unknown Go!
UPS Shipment and Address information apiKey Yes Unknown Go!

Transportation

API Description Auth HTTPS CORS Link
ADS-B Exchange Access real-time and historical data of any and all airbone aircraft No Yes Unknown Go!
AIS Hub Real-time data of any marine and inland vessel equipped with AIS tracking system apiKey No Unknown Go!
AIS Web Aeronautical information in digital media produced by the Department of Airspace Control (DECEA) apiKey No Unknown Go!
Amadeus Travel Innovation Sandbox Travel Search - Limited usage apiKey Yes Unknown Go!
Bay Area Rapid Transit Stations and predicted arrivals for BART apiKey No Unknown Go!
Community Transit Transitland API No Yes Unknown Go!
Goibibo API for travel search apiKey Yes Unknown Go!
GraphHopper A-to-B routing with turn-by-turn instructions apiKey Yes Unknown Go!
Icelandic APIs Open APIs that deliver services in or regarding Iceland No Yes Unknown Go!
Indian Railways Indian Railways Information apiKey No Unknown Go!
Izi Audio guide for travellers apiKey Yes Unknown Go!
Navitia The open API for building cool stuff with transport data apiKey Yes Unknown Go!
REFUGE Restrooms Provides safe restroom access for transgender, intersex, and gender nonconforming individuals No Yes Unknown Go!
Schiphol Airport Schiphol apiKey Yes Unknown Go!
TransitLand Transit Aggregation No Yes Unknown Go!
Transport for Atlanta, US Marta No No Unknown Go!
Transport for Auckland, New Zealand Auckland Transport No Yes Unknown Go!
Transport for Belgium Belgian transport API No Yes Unknown Go!
Transport for Berlin, Germany Third-party VBB API No Yes Unknown Go!
Transport for Boston, US MBTA API No No Unknown Go!
Transport for Budapest, Hungary Budapest public transport API No Yes Unknown Go!
Transport for Chicago, US CTA No No Unknown Go!
Transport for Czech Republic Czech transport API No Yes Unknown Go!
Transport for Denver, US RTD No No Unknown Go!
Transport for Finland Finnish transport API No Yes Unknown Go!
Transport for Germany Deutsche Bahn (DB) API apiKey No Unknown Go!
Transport for India India Public Transport API apiKey Yes Unknown Go!
Transport for London, England TfL API No Yes Unknown Go!
Transport for Madrid, Spain Madrid BUS transport API apiKey No Unknown Go!
Transport for Minneapolis, US NexTrip API OAuth No Unknown Go!
Transport for New York City, US MTA apiKey No Unknown Go!
Transport for Norway Norwegian transport API No No Unknown Go!
Transport for Ottawa, Canada OC Transpo next bus arrival API No No Unknown Go!
Transport for Paris, France RATP Open Data API No No Unknown Go!
Transport for Paris, France Live schedules made simple No No Unknown Go!
Transport for Philadelphia, US SEPTA APIs No No Unknown Go!
Transport for Sao Paulo, Brazil SPTrans OAuth No Unknown Go!
Transport for Sweden Public Transport consumer OAuth Yes Unknown Go!
Transport for Switzerland Swiss public transport API No Yes Unknown Go!
Transport for Switzerland Official Swiss Public Transport Open Data apiKey Yes Unknown Go!
Transport for The Netherlands NS, only trains apiKey No Unknown Go!
Transport for The Netherlands OVAPI, country-wide public transport No Yes Unknown Go!
Transport for Toronto, Canada TTC No Yes Unknown Go!
Transport for United States NextBus API No No Unknown Go!
Transport for Vancouver, Canada TransLink OAuth Yes Unknown Go!
Transport for Victoria, AU PTV API apiKey Yes Unknown Go!
Transport for Washington, US Washington Metro transport API OAuth Yes Unknown Go!
Uber Uber ride requests and price estimation OAuth Yes Yes Go!
WhereIsMyTransport Platform for public transport data in emerging cities OAuth Yes Unknown Go!

URL Shorteners

API Description Auth HTTPS CORS Link
Bitly URL shortener and link management OAuth Yes Unknown Go!
ClickMeter Monitor, compare, and optimize your marketing links apiKey Yes Unknown Go!
Google URL Shortener Takes long URLs and squeezes them into fewer characters to make a link that is easier to share apiKey Yes Unknown Go!
Rebrandly Custom URL shortener for sharing branded links apiKey Yes Unknown Go!

Vehicle

API Description Auth HTTPS CORS Link
Brazilian Vehicles and Prices Vehicles information from Fundação Instituto de Pesquisas Econômicas - Fipe No Yes Unknown Go!
Kelley Blue Book Vehicle info, pricing, configuration, plus much more apiKey Yes No Go!
Mercedes-Benz Telematics data, remotely access vehicle functions, car configurator, locate service dealers apiKey Yes No Go!
NHTSA NHTSA Product Information Catalog and Vehicle Listing No Yes Unknown Go!

Video

API Description Auth HTTPS CORS Link
An API of Ice And Fire Game Of Thrones API No Yes Unknown Go!
Czech Television TV programme of Czech TV No No Unknown Go!
Dailymotion Dailymotion Developer API OAuth Yes Unknown Go!
Netflix Roulette Netflix database No Yes Unknown Go!
Ron Swanson Quotes Television No Yes Unknown Go!
SWAPI Star Wars Information No Yes Unknown Go!
TMDb Community-based movie data apiKey Yes Unknown Go!
TVDB Television data apiKey Yes Unknown Go!
TVMaze TV Show Data No No Unknown Go!
Utelly Check where a tv show or movie is available X-Mashape-Key Yes Unknown Go!
Vimeo Vimeo Developer API OAuth Yes Unknown Go!
YouTube Add YouTube functionality to your sites and apps OAuth Yes Unknown Go!

Weather

API Description Auth HTTPS CORS Link
Dark Sky Weather apiKey Yes Unknown Go!
MetaWeather Weather No Yes Unknown Go!
ODWeather Weather and weather webcams No No Unknown Go!
OpenUV Real-time UV Index Forecast apiKey Yes Unknown Go!
OpenWeatherMap Weather apiKey No Unknown Go!
Weatherbit Weather apiKey Yes Unknown Go!
Wunderground Weather apiKey Yes Unknown Go!
Yahoo! Weather Weather No Yes Unknown Go!
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - jekyll/jekyll: Jekyll is a blog-aware, static site generator in Ruby
Skip to content
🌐 Jekyll is a blog-aware, static site generator in Ruby
Ruby Gherkin JavaScript HTML Shell CSS
Switch branches/tags
Permalink
Failed to load latest commit information.
.github Fix typos (#6764) Feb 11, 2018
benchmark Replace simple regex with equivalent Ruby methods (#6736) Feb 20, 2018
docs fix broken link in maintainer blog post Feb 20, 2018
exe Enforce Style/FrozenStringLiteralComment. (#6265) Aug 4, 2017
features Fix theme gem feature (#6784) Feb 18, 2018
lib Excerpt relative-path should match its path (#6597) Feb 20, 2018
rake Update version in `config.yml` via YAML load / dump (#6677) Jan 6, 2018
rubocop Write a Rubocop Cop to ensure no `#p` or `#puts` calls get committed … Jan 20, 2018
script Update fmt (#6514) Nov 4, 2017
test Excerpt relative-path should match its path (#6597) Feb 20, 2018
.codeclimate.yml codeclimate: exclude livereload.js (#6776) Feb 15, 2018
.editorconfig Add .editorconfig Sep 24, 2016
.gitignore Move bin/jekyll to exe/jekyll to prevent collision with binstubs Jun 15, 2016
.jrubyrc Cleanup .jrubyrc Jan 10, 2016
.rubocop.yml Write a Rubocop Cop to ensure no `#p` or `#puts` calls get committed … Jan 20, 2018
.travis.yml CI: Test against Ruby 2.5.0 (#6664) Jan 5, 2018
CODE_OF_CONDUCT.markdown Rename CODE_OF_CONDUCT to show in banner (#6325) Aug 19, 2017
Gemfile Remove redgreen gem as reflect of #204, 093a5ef (#6720) Jan 25, 2018
History.markdown Update history to reflect merge of #6597 [ci skip] Feb 20, 2018
LICENSE Update license year Dec 31, 2017
README.markdown Docs: Contacts for CoC violation (#6429) Oct 16, 2017
Rakefile enable 'Lint/RescueWithoutErrorClass' Cop (#6482) Oct 28, 2017
appveyor.yml Test against Ruby 2.5 on AppVeyor (#6668) Feb 14, 2018
jekyll.gemspec Write a Rubocop Cop to ensure no `#p` or `#puts` calls get committed … Jan 20, 2018

README.markdown

Jekyll

Gem Version Linux Build Status Windows Build status Test Coverage Code Climate Dependency Status Security

Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind GitHub Pages, which you can use to host sites right from your GitHub repositories.

Philosophy

Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.

See: https://jekyllrb.com/philosophy

Having trouble?

See: https://jekyllrb.com/docs/troubleshooting/

Getting Started

Code of Conduct

In order to have a more open and welcoming community, Jekyll adheres to a code of conduct adapted from the Ruby on Rails code of conduct.

Please adhere to this code of conduct in any interactions you have in the Jekyll community. It is strictly enforced on all official Jekyll repositories, websites, and resources. If you encounter someone violating these terms, please let one of our core team members Olivia, Pat, Matt or Parker know and we will address it as soon as possible.

Diving In

License

See the LICENSE file.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - ionic-team/ionic: Build amazing native and progressive web apps with open web technologies. One app running on everything 🎉
Skip to content
Build amazing native and progressive web apps with open web technologies. One app running on everything 🎉
TypeScript CSS HTML JavaScript PHP Shell

README.md

npm version Circle CI Open Source Helpers

Ionic

Ionic is the open-source mobile app development framework that makes it easy to build top quality native and progressive web apps with web technologies.

Ionic is based on Angular and comes with many significant performance, usability, and feature improvements over the past versions.

See the Building Apps with Ionic slides for a quick overview or watch our Crash Course video for a quick walkthrough on how to get started using Ionic.

Getting Started

Start a new project by following our quick Getting Started guide. We would love to hear from you! If you have any feedback or run into issues using our framework, please file an issue on this repository.

Contributing

Thanks for your interest in contributing! Read up on our guidelines for contributing and then look through our issues with a help wanted label.

Examples

The Ionic Conference App is a full featured Ionic app. It is the perfect starting point for learning and building your own app.

Ionic V1

The source code for Ionic V1 has been moved to ionic-team/ionic-v1. Please open any issues and pull requests related to Ionic V1 on that repository.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - pallets/flask: The Python micro framework for building web applications.
Skip to content
Python Other
Latest commit 4a7db66 Feb 19, 2018
davidism Merge pull request #2636 from pallets/test-cli-runner
add test_cli_runner for testing app.cli commands

README.rst

Flask

Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications. It began as a simple wrapper around Werkzeug and Jinja and has become one of the most popular Python web application frameworks.

Flask offers suggestions, but doesn't enforce any dependencies or project layout. It is up to the developer to choose the tools and libraries they want to use. There are many extensions provided by the community that make adding new functionality easy.

Installing

Install and update using pip:

pip install -U Flask

A Simple Example

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'
$ FLASK_APP=hello.py flask run
 * Running on http://localhost:5000/

Links

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - mui-org/material-ui: React components that implement Google's Material Design.
Skip to content
JavaScript TypeScript
Permalink
Failed to load latest commit information.
.circleci push lab forward Feb 19, 2018
.github [github] Try to fix support bot template blank lines Jan 6, 2018
docs [docs] Sort the pages by path and ignore dashes (#10396) Feb 21, 2018
examples [docs] Expose the theme as a global object (#10326) Feb 16, 2018
flow-typed/npm push lab forward Feb 19, 2018
flow [docs] Use next.js (#7759) Aug 18, 2017
packages [lab][SpeedDial] Fix onClick target element (#10368) Feb 20, 2018
pages [Snackbar] Disable pausing of auto hide when window loses focus (#10390) Feb 21, 2018
scripts push lab forward Feb 19, 2018
src [Snackbar] Disable pausing of auto hide when window loses focus (#10390) Feb 21, 2018
static [docs] Small tweaks Feb 18, 2018
test [Dialog] Consistant description (#10377) Feb 20, 2018
.babelrc push lab forward Feb 19, 2018
.browserslistrc [jss] Fix the last w3c issue I'm aware of (#10063) Jan 27, 2018
.codecov.yml [test] Enforce 100% test coverage in Codecov (#9813) Jan 9, 2018
.editorconfig [.editorconfig] Add max_line_length (#9580) Dec 20, 2017
.eslintignore push lab forward Feb 19, 2018
.eslintrc.js push lab forward Feb 19, 2018
.eslintrc.spellcheck.js [examples] Take ownership on the next.js example (#7703) Aug 8, 2017
.firebaserc [docs] IE11 2nd iteration Apr 15, 2017
.flowconfig [examples] Use Reboot (#9691) Jan 1, 2018
.gitattributes Add gitattributes Dec 12, 2014
.gitignore push lab forward Feb 19, 2018
.size-limit [core] Upgrade some dependency to start looking into React 16.3 (#10338) Feb 17, 2018
BACKERS.md [docs] Add the latest backers ♥ (#10323) Feb 16, 2018
CHANGELOG.md [CHANGELOG] Fix typo Feb 17, 2018
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Aug 9, 2017
CONTRIBUTING.md [docs] Misc fixes (#10055) Jan 27, 2018
GOVERNANCE.md Add Governance Document (#9423) Dec 14, 2017
LICENSE Initial commit Aug 18, 2014
README.md [docs] Add the average response time (#10308) Feb 15, 2018
ROADMAP.md [docs] Plan the breaking changes before v1 (#10348) Feb 21, 2018
SUPPORT.md Update SUPPORT.md (#9702) Jan 2, 2018
docker-compose.yml push lab forward Feb 19, 2018
firebase.json [docs] Cache the svg too Feb 17, 2018
next.config.js [docs] Fix demo links for new util components (#10337) Feb 18, 2018
package.json [docs] Fix IE 11 and W3C warnings (#10394) Feb 21, 2018
prettier.config.js [core] Add global prettier config (#8624) Oct 10, 2017
tsconfig.json Support TypeScript 2.6 and --strictFunctionTypes (#9124) Nov 14, 2017
yarn.lock [docs] Fix IE 11 and W3C warnings (#10394) Feb 21, 2018

README.md

Material-UI logo

Material-UI

React components that implement Google's Material Design.

npm package npm download CircleCI Gitter Coverage Status CII Best Practices Code style Follow on Twitter PeerDependencies Dependencies DevDependencies Average time to resolve an issue

Installation

Material-UI is available as an npm package.

Stable channel (v0.x)

npm install --save material-ui

Pre-release channel (v1-beta) (Recommended for new projects.)

npm install --save material-ui@next

Please note that @next will only point to pre-releases; to get the latest stable release use @latest instead.

Supporting Material-UI

Material-UI is an MIT-licensed open source project. It's an independent project with ongoing development made possible thanks to the support of these awesome backers. If you'd like to join them, please consider:

Your contributions, donations, and sponsorship allow us to build a sustainable organization. They directly support office hours, continued enhancements, great documentation and learning materials!

What's the difference between Patreon and OpenCollective?

Funds donated via Patreon directly support Olivier Tassinari's work on Material-UI. Funds donated via OpenCollective also support Olivier, but will be shared amongst other contributors and pay for operating expenses. These funds are managed transparently through the OpenCollective website. Your name/logo will receive proper recognition and exposure by donating on either platform.

Gold Sponsors

Gold Sponsors are those who have pledged $500/month and more to Material-UI.

via Patreon

via OpenCollective

0 1 2 3 4 5 6 7 8 9

Usage (v1-beta)

Here is a quick example to get you started, it's all you need:

import React from 'react';
import { render } from 'react-dom';
import Button from 'material-ui/Button';

function App() {
  return (
    <Button variant="raised" color="primary">
      Hello World
    </Button>
  );
}

render(<App />, document.querySelector('#app'));

Yes, it's really all you need to get started as you can see in this live and interactive demo:

Edit Button

Should I start with v1-beta?

We often get this question:

Should I start with v1-beta? Beta is beta, so it's not a final product and I'm not guaranteed anything.

Yes, you should.

Some users are starting projects with v0.x which given the quality and stability of v1 they shouldn't be. They are just creating extra work for themselves as they will have to transition at some point.

The v1-beta effort started in May 2016, and it resolves many of the issues with v0. Many of us are already using v1-beta in production with no problems, and resolving the occasional breaking change is less hassle than upgrading from v0.x to v1 would be.

Material-UI will never be a final product, you will never be guaranteed anything whether with v0.x, v1, or any future release. We are keeping v1 in beta so we can release breaking changes without having them slow us down.

The release notes always describe the breaking changes introduced with each release.

Bite the bullet and go for v1-beta.

Questions

For how-to questions and other non-issues, please use StackOverflow instead of Github issues. There is a StackOverflow tag called "material-ui" that you can use to tag your questions.

Examples

Are you looking for an example project to get started? We host some.

Documentation

Check out our documentation website.

Contributing

We'd greatly appreciate any contribution you make. :)

Changelog

Recently Updated? Please read the changelog.

Roadmap

The future plans and high priority features and enhancements can be found in the ROADMAP.md file.

Thanks

Thank you to BrowserStack for providing the infrastructure that allows us to test in real browsers.

License

This project is licensed under the terms of the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - angular/angular: One framework. Mobile & desktop.
Skip to content
TypeScript JavaScript CSS HTML Shell Python PHP
Permalink
Failed to load latest commit information.
.circleci Revert "build: allow bazel build ... (#22168)" Feb 15, 2018
.github docs: replace plnkr with StackBlitz (#20365) Feb 16, 2018
aio docs(aio): updates directive event hooks real capabilities (#16654) Feb 21, 2018
docs docs: update BAZEL.md crosstool error instructions (#22018) Feb 18, 2018
integration fix(core): require factory to be provided for shakeable InjectionToken ( Feb 16, 2018
modules refactor(ivy): rename `bindX()` functions to `interpolationX()` (#22229) Feb 15, 2018
packages feat(core): support metadata reflection for native class types (#22356) Feb 22, 2018
scripts fix: merge-pr script (#22290) Feb 18, 2018
tools build: make git revert messages valid (#22339) Feb 21, 2018
.bowerrc chore(dgeni): clean up legacy typings bundle creation Oct 29, 2015
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. Apr 2, 2015
.editorconfig chore(.editorconfig): include markdown config Jan 27, 2015
.gitattributes chore: force lf EOL for ts files (#11143) Aug 29, 2016
.gitignore build(common): extract i18n locale data from cldr (#18284) Aug 22, 2017
.mailmap build: add a Git .mailmap with my new name (#19550) Oct 9, 2017
.nvmrc build: update node version number in .nvmrc (#20832) Dec 12, 2017
.pullapprove.yml ci: mark PRs with rejection as not green (#21922) Feb 5, 2018
.travis.yml ci: remove bazel job from Travis (#22170) Feb 13, 2018
BUILD.bazel build(ivy): create hello world rollup (#22004) Feb 6, 2018
CHANGELOG.md docs: add changelog for 6.0.0-beta.5 Feb 22, 2018
CONTRIBUTING.md docs: correct grammar mistakes in CONTRIBUTING.md (#22285) Feb 18, 2018
LICENSE docs(common): update copyright years (#21232) Jan 4, 2018
README.md docs: remove broken issuestats.com badges (#21334) Jan 5, 2018
WORKSPACE feat(bazel): ng_module produces bundle index (#22176) Feb 15, 2018
bower.json docs: branding fixes (#14132) Jan 27, 2017
browser-providers.conf.js build: remove required BrowserStack run as it fails with “Access deni… Oct 17, 2017
build.sh build: Remove angular_src nested workspace (#21096) Jan 19, 2018
gulpfile.js test(packaging): added test for source map correctness Sep 12, 2017
karma-js.conf.js build(ivy): create hello world rollup (#22004) Feb 6, 2018
package.json release: cut the 6.0.0-beta.5 release Feb 22, 2018
protractor-e2e.conf.js refactor: add license header to JS files & format files (#12081) Oct 5, 2016
protractor-examples-e2e.conf.js refactor: format and lint code Dec 12, 2016
protractor-perf.conf.js refactor: add license header to JS files & format files (#12081) Oct 5, 2016
shims_for_IE.js Revert "refactor: add license header to JS files & format files (#12035 Oct 4, 2016
test-events.js fix(platform-browser): run BLACK_LISTED_EVENTS outside of ngZone (#18993 Sep 5, 2017
test-main.js build: add bazel test rules for remainder of packages (#21053) Dec 22, 2017
test.sh build: remove references to `tsc-wrapped` (#19298) Sep 21, 2017
tslint.json build: add lint rule for global flags in rollup config (#20028) Oct 31, 2017
yarn.lock Revert "build: allow bazel build ... (#22168)" Feb 15, 2018
yarn.lock.readme.md build: switch from npm to yarn (#19328) Sep 22, 2017

README.md

Build Status CircleCI BrowserStack Status Join the chat at https://gitter.im/angular/angular npm version

Sauce Test Status

Safari (7+), iOS (7+) and IE mobile (11) are tested on BrowserStack.

Angular

Angular is a development platform for building mobile and desktop web applications using Typescript/JavaScript and other languages.

Quickstart

Get started in 5 minutes.

Want to help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - x64dbg/x64dbg: An open-source x64/x32 debugger for windows.
Skip to content
C++ C Other
Permalink
Failed to load latest commit information.
.github PROJECT: updated issues template May 5, 2017
bin Update the Win32 error and NTSTATUS databases with values added in SD… Oct 28, 2017
deps @ 84d9994 DBG: better default configuration for Scylla Jan 28, 2018
help PROJECT: moved help https://github.com/x64dbg/docs Jul 6, 2016
hooks PROJECT: update AStyleWhore (renamed to AStyleHelper) Nov 4, 2017
src DBG: move call to CB_STOPDEBUG to the very end of the debug loop Feb 14, 2018
.clang-format PROJECT: added clang-format config file (don't use this yet!) Apr 4, 2017
.editorconfig PROJECT: added .editorconfig Jun 18, 2016
.gitignore PROJECT: update AStyleWhore (renamed to AStyleHelper) Nov 4, 2017
.gitmodules PROJECT: shallow clone of deps to save bandwidth Dec 3, 2017
CODE_OF_CONDUCT.md PROJECT: add code of conduct Oct 23, 2017
CONTRIBUTING.md PROJECT: Add pull request documentation Oct 23, 2017
LICENSE "x64_dbg"->"x64dbg" + added Nukem Apr 9, 2015
README.md PROJECT: added sourceforge badge Aug 10, 2017
build.bat PROJECT: AStyle Oct 9, 2017
clean.bat GUI+PROJECT: "build" -> "gui_build" Nov 8, 2015
format.bat PROJECT: update AStyleWhore (renamed to AStyleHelper) Nov 4, 2017
install.bat PROJECT: install script Aug 4, 2014
maketranslatetemplate.bat PROJECT: minimize maketranslatetemplate.bat Sep 8, 2016
release.bat GUI: deprecate local help file + fixed release script Aug 1, 2017
setenv.bat PROJECT: updated dependencies + setenv.bat to reflect the wiki Aug 25, 2017
setupdeps.bat PROJECT: batch file to setup dependencies Jul 29, 2017
x64dbg.sln Renamed `Capstone` -> `Zydis` Oct 9, 2017
x64dbg_scheme.vsd PROJECT: sceme -> scheme Nov 7, 2015

README.md

x64dbg

BountySource Build status coverity Crowdin

Telegram Join the chat at Gitter freenode Download x64dbg

Note

Please run install.bat before you start committing code, this ensures your code is auto-formatted to the x64dbg standards.

Compiling

For a complete guide on compiling x64dbg read this.

Downloads

Releases of x64dbg can be found here.

Overview

x64dbg is an open-source x32/x64 debugger for Windows.

Activity Graph

Throughput Graph

Features

  • Open-source
  • Intuitive and familiar, yet new user interface
  • C-like expression parser
  • Full-featured debugging of DLL and EXE files (TitanEngine)
  • IDA-like sidebar with jump arrows
  • IDA-like instruction token highlighter (highlight registers, etc.)
  • Memory map
  • Symbol view
  • Thread view
  • Source code view
  • Content-sensitive register view
  • Fully customizable color scheme
  • Dynamically recognize modules and strings
  • Import reconstructor integrated (Scylla)
  • Fast disassembler (Capstone)
  • User database (JSON) for comments, labels, bookmarks, etc.
  • Plugin support with growing API
  • Extendable, debuggable scripting language for automation
  • Multi-datatype memory dump
  • Basic debug symbol (PDB) support
  • Dynamic stack view
  • Built-in assembler (XEDParse/Keystone/asmjit)
  • Executable patching
  • Yara Pattern Matching
  • Decompiler (Snowman)
  • Analysis

License

x64dbg is licensed under GPLv3, which means you can freely distribute and/or modify the source of x64dbg, as long as you share your changes with us. The only exception is that plugins you write do not have to comply with the GPLv3 license. They do not have to be open-source and they can be commercial and/or private. The only exception to this is when your plugin uses code copied from x64dbg. In that case you would still have to share the changes to x64dbg with us.

Credits

Special Thanks

Developers

Contributors

See here for a more up-to-date list of contributers.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - nwjs/nw.js: Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies.
Skip to content
Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies.
C++ Python JavaScript Objective-C++ HTML Objective-C Other
Latest commit 5b39016 Feb 18, 2018

README.md

node-webkit is renamed NW.js

Gitter
Official site: https://nwjs.io
Official documentation: http://docs.nwjs.io/

Introduction

NW.js is an app runtime based on Chromium and node.js. You can write native apps in HTML and JavaScript with NW.js. It also lets you call Node.js modules directly from the DOM and enables a new way of writing native applications with all Web technologies.

It was created in the Intel Open Source Technology Center.

Building a Cross-platform Desktop App with NW.js
Creating Desktop Applications With node-webkit
WebApp to DesktopApp with node-webkit (slides)
Essay on the history and internals of the project

Features

  • Apps written in modern HTML5, CSS3, JS and WebGL.
  • Complete support for Node.js APIs and all its third party modules.
  • Good performance: Node and WebKit run in the same thread: Function calls are made straightforward; objects are in the same heap and can just reference each other.
  • Easy to package and distribute apps.
  • Available on Linux, Mac OS X and Windows.

Downloads

Demos and real apps

You may also be interested in our demos repository and the List of apps and companies using nw.js.

Quick Start

Create index.html:

<!DOCTYPE html>
<html>
  <head>
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using node.js <script>document.write(process.version)</script>.
  </body>
</html>

Create package.json:

{
  "name": "nw-demo",
  "version": "0.0.1",
  "main": "index.html"
}

Run:

$ /path/to/nw .  (suppose the current directory contains 'package.json')

Note: on Windows, you can drag the folder containing package.json to nw.exe to open it.

Note: on OSX, the executable binary is in a hidden directory within the .app file. To run node-webkit on OSX, type:
/path/to/nwjs.app/Contents/MacOS/nwjs . (suppose the current directory contains 'package.json')

Documents

For more information on how to write/package/run apps, see:

And our Wiki for much more.

Community

We use the google group as our mailing list (use English only). Subscribe via nwjs-general+subscribe@googlegroups.com.

NOTE: Links to the old google group (e.g. https://groups.google.com/forum/#!msg/node-webkit/doRWZ07LgWQ/4fheV8FF8zsJ) that are no longer working can be fixed by replacing node-webkit with nwjs-general (e.g https://groups.google.com/forum/#!msg/nwjs-general/doRWZ07LgWQ/4fheV8FF8zsJ).

Issues are being tracked here on GitHub.

The source code for NW.js and the daily development spans across multiple repositories in this organization. This repository is for the purpose of issue tracking, landing page and part of the source code.

License

NW.js's code in this repo uses the MIT license, see our LICENSE file. To redistribute the binary, see How to package and distribute your apps

Sponsors

The work is being sponsored by:

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - impress/impress.js: It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.
Skip to content
It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.
JavaScript HTML CSS
Latest commit e52866d Jan 7, 2018
henrikingo committed Jan 7, 2018 Remove CHANGELOG.md as it was no longer up to date.
For release notes, see Github release page:
https://github.com/impress/impress.js/releases

For absolutely every detail, see Github commits page (or `git log`)
https://github.com/impress/impress.js/commits/master

Fixes #574
Permalink
Failed to load latest commit information.
css Make impress-console-button actually clickable (#651) Jan 1, 2018
examples Make impress-console-button actually clickable (#651) Jan 1, 2018
extras @ 6230c2f Add impress-extras as git submodule Nov 5, 2017
js Fix typo Jan 7, 2018
src Fix typo Jan 7, 2018
test impressConsole broke init() if root element didn't have id="impress" Dec 31, 2017
.gitattributes Add encrypted sauce credentials with new key (#584) Oct 1, 2016
.gitignore Introduce plugin framework Sep 25, 2017
.gitmodules Add impress-extras as git submodule Nov 5, 2017
.jscsrc Merge more testing coverage from henrikingo fork Sep 16, 2017
.jshintrc Update build.js to activate all the plugins added in previous commits Oct 30, 2017
.npmignore Add .npmignore Jul 3, 2016
DOCUMENTATION.md Fix the DOCUMENTATION.md for impress:stepenter and impress:stepleave … Nov 12, 2017
LICENSE Fix notes from @bartaz Feb 2, 2016
README.md Add link to Github release page for downloading stable releases. Dec 1, 2017
apple-touch-icon.png even more iPad love Feb 15, 2012
bower.json Remove duplicated bower 'main' entry Mar 19, 2016
build.js Add another demo presentation: examples/classic-slides Nov 5, 2017
circle.yml Move creds to circle-ci accnt config. (#593) Oct 25, 2016
favicon.png impressive favicon added Mar 10, 2012
index.html Merge pull request #643 from impress/dev Nov 12, 2017
karma.conf-sauce.js impressConsole broke init() if root element didn't have id="impress" Dec 31, 2017
karma.conf.js impressConsole broke init() if root element didn't have id="impress" Dec 31, 2017
package.json impressConsole broke init() if root element didn't have id="impress" Dec 31, 2017
qunit_test_runner.html impressConsole broke init() if root element didn't have id="impress" Dec 31, 2017

README.md

impress.js

CircleCI

It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.

WARNING

impress.js may not help you if you have nothing interesting to say ;)

HOW TO USE IT

Checking out and initializing the git repository

git clone --recursive https://github.com/impress/impress.js.git
cd impress.js

Note: For a minimal checkout, omit the --recursive option. This will leave out extra plugins.

Stable releases

New features and fixes are continuously merged into the master branch, which is what the above command will check out. For the latest stable release, see the Github Releases page.

Documentation

Reference documentation of core impress.js features and API you can find it in DOCUMENTATION.md.

The HTML source code of the official impress.js demo serves as a good example usage and contains comments explaning various features of impress.js. For more information about styling you can look into CSS code which shows how classes provided by impress.js can be used. Last but not least JavaScript code of impress.js has some useful comments if you are interested in how everything works. Feel free to explore!

Official demo

impress.js demo by @bartaz

Examples and demos

The Classic Slides demo is targeted towards beginners, or can be used as a template for presentations that look like the traditional PowerPoint slide deck. Over time, it also grew into the example presentation that uses most of the features and addons available.

More examples and demos can be found on Examples and demos wiki page.

Feel free to add your own example presentations (or websites) there.

Other tutorials and learning resources

If you want to learn even more there is a list of tutorials and other learning resources on the wiki, too.

There is also a book available about Building impressive presentations with impress.js by Rakhitha Nimesh Ratnayake.

You may want to check out the sibling project Impressionist: a 3D GUI editor that can help you in creating impress.js presentations.

Mailing list

You're welcome to ask impress.js related questions on the impressionist-presentations mailing list.

REPOSITORY STRUCTURE

  • index.html: This is the official impress.js demo, showcasing all of the features of the original impress.js, as well as some new plugins as we add them.
    • As already mentioned, this file is well commented and acts as the official tutorial.
  • examples/: Contains several demos showcasing additional features available.
    • Classic Slides is a simple demo that that you can use as template if you want to create very simple, rectangular, PowerPoint-like presentations.
  • src/: The main file is src/impress.js. Additional functionality is implemented as plugins in src/plugins/.
  • test/: Contains QUnit and Syn libraries that we use for writing tests, as well as some test coverage for core functionality. (Yes, more tests are much welcome.) Tests for plugins are in the directory of each plugin.
  • js/: Contains js/impress.js, which contains a concatenation of the core src/impress.js and all the plugins. Traditionally this is the file that you'll link to in a browser. In fact both the demo and test files do exactly that.
  • css/: Contains a CSS file used by the demo. This file is not required for using impress.js in your own presentations. Impress.js creates the CSS it needs dynamically.
  • extras/ contains plugins that for various reasons aren't enabled by default. You have to explicitly add them with their own script element to use them.
  • build.js: Simple build file that creates js/impress.js. It also creates a minified version impress.min.js, but that one is not included in the github repository.
  • package.json: An NPM package specification. This was mainly added so you can easily install buildify and run node build.js. Other than the build process, which is really just doing roughly cat src/impress.js src/plugins/*/*.js > js/impress.js, and testing, impress.js itself doesn't depend on Node or any NPM modules.
  • bower.json: A Bower package file. We also don't depend on Bower, but provide this file if you want to use it.

WANT TO CONTRIBUTE?

For developers, once you've made changes to the code, you should run these commands for testing:

npm run build
npm run test
npm run lint

Note that running firefox qunit_test_runner.html is usually more informative than running karma with npm run test. They both run the same tests.

More info about the src/ directory can be found in src/plugins/README.md.

ABOUT THE NAME

impress.js name is courtesy of @skuzniak.

It's an (un)fortunate coincidence that a Open/LibreOffice presentation tool is called Impress ;)

Reference API

See the Reference API

BROWSER SUPPORT

The design goal for impress.js has been to showcase awesome CSS3 features as found in modern browser versions. We also use some new DOM functionality, and specifically do not use jQuery or any other JavaScript libraries, nor our own functions, to support older browsers. In general, recent versions of Firefox and Chrome are known to work well. Reportedly IE now works too.

The typical use case for impress.js is to create presentations that you present from your own laptop, with a browser version you know works well. Some people also use impress.js successfully to embed animations or presentations in a web page, however, be aware that in this some of your visitors may not see the presentation correctly, or at all.

In particular, impress.js makes use of the following JS and CSS features:

COPYRIGHT AND LICENSE

Copyright 2011-2016 Bartek Szopka

Copyright 2015-2017 Henrik Ingo

Released under the MIT License

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - h5bp/Front-end-Developer-Interview-Questions: A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore.
Skip to content
A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore.
Switch branches/tags
Nothing to show
Latest commit e4c5740 Feb 15, 2018
seckin92 and vvscode Update README.md (#456)
Update CONTRIBUTORS and Getting Involved ("Dahil Olmak Icin") sections, correct formatting.

README.md

Front-end Job Interview Questions

This file contains a number of front-end interview questions that can be used when vetting potential candidates. It is by no means recommended to use every single question here on the same candidate (that would take hours). Choosing a few items from this list should help you vet the intended skills you require.

Note: Keep in mind that many of these questions are open-ended and could lead to interesting discussions that tell you more about the person's capabilities than a straight answer would.

Table of Contents

  1. General Questions
  2. HTML Questions
  3. CSS Questions
  4. JS Questions
  5. Testing Questions
  6. Performance Questions
  7. Network Questions
  8. Coding Questions
  9. Fun Questions

Getting Involved

  1. Contributors
  2. How to Contribute
  3. License

Contributors:

This project started in 2009 as a collaboration of @paul_irish @bentruyman @cowboy @ajpiano @SlexAxton @boazsender @miketaylr @vladikoff @gf3 @jon_neal @sambreed and @iansym.

This project is currently maintained by:

It has since been active thanks to these incredibly wonderful people.

Feeling inspired? Check our Contributing guide to get started!

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management
Skip to content
Production-Grade Container Scheduling and Management
Go Python Shell HTML Makefile C
Switch branches/tags
Latest commit a4222bd Feb 22, 2018
k8s-merge-robot Merge pull request #60186 from feiskyer/vmss-check
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Cleanup node type checking for azure nodes

**What this PR does / why we need it**:

This PR cleanup node type checking for azure nodes. It also Fixes a problem of `instance not found` error for VMAS nodes in vmss cluster (vmType set to vmss):

```
ss.GetPrimaryInterface(k8s-master), ss.getCachedVirtualMachine(k8s-master), err=instance not found
```

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #60185

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
Permalink
Failed to load latest commit information.
.github Merge pull request #54114 from xiangpengzhao/fix-pr-template Oct 31, 2017
Godeps Bump dependencies for build tag fixes Feb 21, 2018
api Merge pull request #59157 from vladimirvivien/csi-volsource-beta Feb 22, 2018
build Merge pull request #57648 from Fsero/bugfix/add_ipset_binary_for_ipvs Feb 21, 2018
cluster Merge pull request #60095 from MrHohn/addon-manager-bump-istio Feb 22, 2018
cmd Merge pull request #59288 from stevesloka/apiServerDNS Feb 22, 2018
docs Merge pull request #59157 from vladimirvivien/csi-volsource-beta Feb 22, 2018
examples Merge pull request #59319 from pires/clean_elasticsearch_example Feb 21, 2018
hack set default enabled admission plugins by official document Feb 22, 2018
logo Don't use strokes in the logo SVG Oct 12, 2017
pkg Merge pull request #60186 from feiskyer/vmss-check Feb 22, 2018
plugin Merge pull request #59949 from nicksardo/deprecate-cloud-provider Feb 22, 2018
staging Merge pull request #59264 from atlassian/set-gvk-on-conversion-to-uns… Feb 22, 2018
test Merge pull request #60095 from MrHohn/addon-manager-bump-istio Feb 22, 2018
third_party Autogenerated: hack/update-bazel.sh Feb 16, 2018
translations Add OWNERS for translations folder Feb 5, 2018
vendor Bump dependencies for build tag fixes Feb 21, 2018
.bazelrc move build related files out of the root directory May 15, 2017
.generated_files Move .generated_docs to docs/ so docs OWNERS can review / approve Feb 16, 2017
.gitattributes Hide generated files only on github Jan 22, 2018
.gitignore fix all the typos across the project Feb 11, 2018
.kazelcfg.json Switch from gazel to kazel, and move kazelcfg into build/root Jul 18, 2017
BUILD.bazel move build related files out of the root directory May 15, 2017
CHANGELOG-1.10.md Merge pull request #59250 from thedrow/patch-1 Feb 21, 2018
CHANGELOG-1.2.md Update TOC of CHANGELOG Sep 9, 2017
CHANGELOG-1.3.md fix the format for github error Jan 31, 2018
CHANGELOG-1.4.md fix the format for github error Feb 2, 2018
CHANGELOG-1.5.md fix typo in kubeadm Feb 6, 2018
CHANGELOG-1.6.md Fix typo Feb 1, 2018
CHANGELOG-1.7.md Update CHANGELOG-1.7.md for v1.7.12. Dec 29, 2017
CHANGELOG-1.8.md Update CHANGELOG-1.8.md for v1.8.8. Feb 9, 2018
CHANGELOG-1.9.md Merge pull request #59464 from dixudx/fix_all_typos Feb 11, 2018
CHANGELOG.md Update release note links for 1.10 Jan 17, 2018
CONTRIBUTING.md Pointed to community/contributors/guide/README.md Dec 15, 2017
LICENSE LICENSE: revert modifications to Apache license Nov 22, 2016
Makefile move build related files out of the root directory May 15, 2017
Makefile.generated_files move build related files out of the root directory May 15, 2017
OWNERS Fix my incorrect username in #46649 Aug 10, 2017
OWNERS_ALIASES Merge pull request #59977 from ravisantoshgudimetla/add-to-maintainers Feb 21, 2018
README.md Update README.md Feb 11, 2018
SUPPORT.md Add a SUPPORT.md file for github Aug 11, 2017
WORKSPACE move build related files out of the root directory May 15, 2017
code-of-conduct.md Update code-of-conduct.md Dec 20, 2017
labels.yaml Merge pull request #51848 from xiangpengzhao/milestone-label Sep 5, 2017

README.md

Kubernetes

Submit Queue Widget GoDoc Widget CII Best Practices


Kubernetes is an open source system for managing containerized applications across multiple hosts; providing basic mechanisms for deployment, maintenance, and scaling of applications.

Kubernetes builds upon a decade and a half of experience at Google running production workloads at scale using a system called Borg, combined with best-of-breed ideas and practices from the community.

Kubernetes is hosted by the Cloud Native Computing Foundation (CNCF). If you are a company that wants to help shape the evolution of technologies that are container-packaged, dynamically-scheduled and microservices-oriented, consider joining the CNCF. For details about who's involved and how Kubernetes plays a role, read the CNCF announcement.


To start using Kubernetes

See our documentation on kubernetes.io.

Try our interactive tutorial.

Take a free course on Scalable Microservices with Kubernetes.

To start developing Kubernetes

The community repository hosts all information about building Kubernetes from source, how to contribute code and documentation, who to contact about what, etc.

If you want to build Kubernetes right away there are two options:

You have a working Go environment.
$ go get -d k8s.io/kubernetes
$ cd $GOPATH/src/k8s.io/kubernetes
$ make
You have a working Docker environment.
$ git clone https://github.com/kubernetes/kubernetes
$ cd kubernetes
$ make quick-release

For the full story, head over to the developer's documentation.

Support

If you need support, start with the troubleshooting guide, and work your way through the process that we've outlined.

That said, if you have questions, reach out to us one way or another.

Analytics

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - getlantern/lantern: 🔴Lantern Latest Download https://github.com/getlantern/lantern/releases/tag/latest 🔴蓝灯最新版本下载 https://github.com/getlantern/forum/issues/833 🔴
Skip to content
Go CSS Python Java JavaScript HTML Other
Switch branches/tags
Latest commit 9572840 Jun 9, 2017
oxtoacart committed Jun 9, 2017 Added Used By badge
Permalink
Failed to load latest commit information.
LanternMobileTestbed Using purpose-built notification icon Mar 28, 2016
MobileSDK merge from devel with conflict fixes May 8, 2016
PubSub Update build tools revision and Readme Apr 25, 2016
doc Add images Sep 8, 2015
installer-resources Dynamically generating version inside App manifest Mar 7, 2016
lantern-ui Bandwidth tracking using data from proxies Jun 2, 2016
pubsub-java Merge commit '86704fc81b1f94431e4a3a4a4fec9778b8743a8b' into issue-3745 Mar 17, 2016
src Merge pull request #5396 from getlantern/cfscanner Nov 4, 2016
.gitignore Added syso file to Git Apr 25, 2016
.gitmodules Added http-proxy-lantern submodule Apr 14, 2016
.gost Squashed 'src/github.com/getlantern/osversion/' content from commit 7… Aug 14, 2015
.travis.yml Attempt to make compiling work again Jun 1, 2016
Dockerfile Using custom Go in docker Jun 9, 2016
LICENSE This somehow got lost in the repo migration. Aug 27, 2015
Makefile Add support for simulating autoupdates locally. Jun 29, 2016
README-dev.md General description of the Lantern project Sep 8, 2015
README-release.md Separate README for release builds Mar 3, 2016
README-translations.md Added translation comment. Aug 9, 2016
README.md Added Used By badge Jun 9, 2017
envvars.bash.enc try and fix envvars.bash.enc for travis May 7, 2015
pre-commit Fixed commit/push hooks to export MODIFIED_DIRS variable Jan 7, 2016
pre-push Fixed commit/push hooks to export MODIFIED_DIRS variable Jan 7, 2016
prehook.sh Added pre-push.hook script that works by comparing changes to remote … Dec 29, 2015
run.bash closes getlantern/lantern#2288 Added headless mode for lantern Mar 9, 2015
setenv.bash Few fixes for building on Windows. May 4, 2016
testpackages.txt removed yamlconf Jul 22, 2016

README.md

lantern Travis CI Status Coverage Status Sourcegraph

🔴蓝灯(Lantern)最新版下载点这里🔴

If you're looking for Lantern installers, you can find all of them at the following links:

If you would like to give the latest but more UNSTABLE BETA versions a try, you can find all of them at the following links:

If you're looking for help, please visit below user forums:

| English | 中文 | فارسی | français

Building Lantern

Prerequisites

  • Custom fork of Go is currently required. We'll eventually switch to Go 1.7 which supports what we need due to this.
  • An OSX or Linux host. Building on Windows is only partially supported with the help of Cygwin.
  • Git - brew install git, apt-get install git, etc
  • GNU Make
  • Nodejs & NPM
  • GNU C Library (linux only) - apt-get install libc6-dev-i386, etc
  • Gulp - npm i gulp-cli -g

To build and run Lantern desktop, just do:

git clone https://github.com/getlantern/lantern.git
cd lantern
make lantern
./lantern

During development, you'll likely want to do a clean build like this:

make clean-desktop lantern && ./lantern

Building Mobile

Mobile Prerequisites

Building the mobile library and app requires the following:

  1. Install Java JDK 7 or 8
  2. Install Go 1.6 or higher
  3. Install Android SDK Tools
  4. Install NDK
  5. Install Gradle

Make sure to set these environment variables before trying to build any Android components (replace the paths based on wherever you've installed the Android SDK and NDK).

export ANDROID_HOME=/opt/adt-bundle-mac-x86_64-20130917/sdk
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools:$PATH
export NDK_HOME=/opt/android-ndk-r10e
export PATH=$NDK_HOME:$PATH

Go Android Library

The core Lantern functionality can be packaged into a native Android library with:

make android-lib

Java Android SDK

The Java-based Android SDK allows easy embedding of Lantern functionality in 3rd party Android apps such as Manoto TV. The SDK can be built with:

make android-sdk

Lantern Mobile Testbed

This simple Android application provides a way to test the Android SDK. It can be built with:

make android-testbed

Lantern Mobile App

Debug

To create a debug build of the full lantern mobile app:

make android-debug

To install on the default device:

make android-install

Release

To create a release build, add the following to your ~/.gradle/gradle.properties file:

KEYSTORE_PWD=$KEYSTORE_PASSWORD
KEYSTORE_FILE=keystore.release.jks
KEY_PWD=$KEY_PASSWORD

You can find the exact values to add to your gradle.properties here.

Then it can be built with:

SECRETS_DIR=$PATH_TO_TOO_MANY_SECRETS \
VERSION=2.0.0-beta1 make android-release

Android Tips

Android Studio

To get the build working for Android Studio, you'll want to add the following dummy values to your ~/.gradle/gradle.properties file:

lanternRevisionDate="April 26, 2016"
lanternVersion=2.2.1

Uninstall for All Users

If you use adb to install and debug an app to your Android device during development and then subsequently build a signed APK and try to install it on that same device, you may receive an unhelpful error saying "App Not Installed". This typically means that you tried to install the same app but signed with a different key. The solution is to uninstall the app first, but you have to uninstall it for all users. You can do this by selecting "Uninstall for all users" from:

Settings -> Apps -> [Pick the App] -> Hamburger Menu (...) -> Uninstall for all users.

If you forget to do this and just uninstall normally, you'll still encounter the error. To fix this, you'll have to run the app with adb again and then uninstall for all users.

Getting HTTP Connections to Use Proxy

In android, programmatic access to HTTP resources typically uses the HttpURLConnection class. You can tell it to use a proxy by setting some system properties:

System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port);
System.setProperty("https.proxyHost", host);
System.setProperty("https.proxyPort", port);

You can disable proxying by clearing those properties:

System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort");
System.clearProperty("https.proxyHost");
System.clearProperty("https.proxyPort");

However, there is one big caveat - HttpURLConnection uses keep-alives to reuse existing TCP connections. These TCP connections will still be using the old proxy settings. This has several implications:

Set the proxy settings as early in the application's lifecycle as possible, ideally before any HttpURLConnections have been opened.

Don't expect the settings to take effect immediately if some HttpURLConnections have already been opened.

Disable keep-alives if you need to, which you can do like this:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// Need to force closing so that old connections (with old proxy settings) don't get reused.
urlConnection.setRequestProperty("Connection", "close");

Building Lantern for running on a server

To run Lantern on a server, you simply need to set a flag to build it in headless mode and then tell it to run on any local address as opposed to binding to localhost (so that it's accessible from other machines). You can do this as follows:

  1. HEADLESS=true make docker-linux or, if you're already running on Linux just HEADLESS=true make linux
  2. ./lantern_linux_amd64 --addr 0.0.0.0:8787 or ./lantern_linux_386 --addr 0.0.0.0:8787

Other

Generating assets

make genassets

If the environment variable UPDATE_DIST=true is set, make genassets also updates the resources in the dist folder.

An annotated tag can be added like this:

git tag -a v1.0.0 -m"Tagged 1.0.0"
git push --tags

Use make create-tag as a shortcut for creating and uploading tags:

VERSION='2.0.0-beta5' make create-tag

If you want to both create a package and upload a tag, run the create-tag task right after the packages task:

[...env variables...] make packages create-tag

Updating Icons

The icons used for the system tray are stored in src/github/getlantern/lantern/icons. To apply changes to the icons, make your updates in the icons folder and then run make update-icons.

Continuous Integration with Travis CI

Continuous builds are run on Travis CI. These builds use the .travis.yml configuration. The github.com/getlantern/cf unit tests require an envvars.bash to be populated with credentials for cloudflare. The original envvars.bash is available here. An encrypted version is checked in as envvars.bash.enc, which was encrypted per the instructions here.

Documentation for developers

Dev README

Please, go to README-dev for an in-depth explanation of the Lantern internals and cloud services.

Release README

Please visit README-release for details on building release versions of Lantern.

Translations README

More info for dealing with translations is available in README-translations.

Contributing changes

Lantern is a gost project that provides repeatable builds and consolidated pull requests for lantern.

Go code in Lantern must pass several tests:

You can find a generic git-hook file, which can be used as a pre-push (or pre-commit) hook to automatically ensure these tests are passed before committing any code. Only Go packages in src/github.com/getlantern will be tested, and only those that have changes in them.

Install by copying it into the local .git/hooks/ directory, with the pre-push file name if you want to run it before pushing. Alternatively, you can copy pre-commit.hook to pre-commit to run it before each commit.

ln -s "$(pwd)/prehook.sh" .git/hooks/prehook.sh
ln -s "$(pwd)/pre-push" .git/hooks/pre-push

Important notice

If you must commit without running the hooks, you can run git with the --no-verify flag.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - mtdvio/every-programmer-should-know: A collection of (mostly) technical things every software developer should know
Skip to content
A collection of (mostly) technical things every software developer should know
Switch branches/tags
Nothing to show
Latest commit 338abc3 Jan 17, 2018
mr-mig committed Jan 17, 2018 Merge pull request #96 from awesomejerry/master
Add `repl.it` to `Services`

README.md

Every Programmer Should Know 🤔

A collection of (mostly) technical things every software developer should know.

☝️ These are resources I can recommend to every programmer regardless of their skill level or tech stack

Highly opinionated 💣. Not backed by science.
Comes in no particular order ♻️

U like it? ⭐️ it and share with a friendly developer! U don't like it? Watch the doggo 🐶

P.S. You don't need to know all of that by heart to be a programmer.
But knowing the stuff will help you become better! 💪

P.P.S. Contributions are welcome!


Introduction

Falsehoods

  • Awesome Falsehoods
    💊 Curated list of falsehoods programmers believe in.
    Check for things you do not know about Strings, Addresses, Names, Numbers, Emails, Timezones and Dates and more.

Algorithms

Data Structures

Numbers

Strings

Latency

Time

Memory

Distributed Systems

RegExp

Security

SEO

Architecture

Practices

Career

UX/Usability

Open Source

Remote Work

Engineering Philosophy

Problem Solving

Soft Skills

Papers on Programming

Free Books on Programming

Services ⚡️

Licenses

Where To Look For Further Info

Coding Practice Sites ⚡️

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - django/django: The Web framework for perfectionists with deadlines.
Skip to content
Python JavaScript HTML CSS Shell Smarty
Permalink
Failed to load latest commit information.
.tx Removed contrib-messages entry in Transifex config file Jun 29, 2016
django Removed unused opts argument from admin's get_deleted_objects(). Feb 21, 2018
docs Added backticks around obj argument in admin docs. Feb 22, 2018
extras Refs #23919 -- Removed Python 2 reference in django_bash_completion. Jul 10, 2017
js_tests Refs #28956 -- Removed usage of jQuery's deprecated .selector propert… Dec 26, 2017
scripts Refs #23968 -- Removed unnecessary lists, generators, and tuple calls. Jun 1, 2017
tests Fixed #29132 -- Avoided connecting update_last_login() handler if Use… Feb 21, 2018
.editorconfig Added Python max_line_length to .editorconfig. Jun 13, 2016
.eslintignore Refs #16501, #26474 -- Added xregexp.js source file. Jun 6, 2016
.eslintrc Fixed #25165 -- Removed inline JavaScript from the admin. Dec 5, 2015
.gitattributes Fixed #19670 -- Applied CachedFilesMixin patterns to specific extensions Mar 30, 2016
.gitignore Fixed #22446 -- Added tox.ini to automate pull request checks. Jul 20, 2016
.hgignore Synced .hgignore with .gitignore Jul 1, 2015
AUTHORS Fixed #28960 -- Added GEOSGeometry.buffer_with_style(). Feb 11, 2018
CONTRIBUTING.rst Added link to the code of conduct from contributing guides. Apr 17, 2015
Gruntfile.js Fixed qunit tests (coverage still missing). (#7716) Dec 19, 2016
INSTALL Fixed #27857 -- Dropped support for Python 3.4. Sep 25, 2017
LICENSE Whitespace cleanup. Oct 10, 2013
LICENSE.python Updated Python license for 2018. Jan 5, 2018
MANIFEST.in Simplified MANIFEST.in Dec 12, 2015
README.rst Added a link in README.rst for people new to IRC. Oct 24, 2017
package.json Fixed qunit tests (coverage still missing). (#7716) Dec 19, 2016
setup.cfg Refs #23919 -- Removed misc Python 2/3 references. Jan 25, 2017
setup.py Fixed #28878 -- Added python_requires in setup.py and a warning for o… Dec 22, 2017
tox.ini Refs #27857 -- Removed Python 3.4 from tox.ini. Oct 6, 2017

README.rst

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Thanks for checking it out.

All documentation is in the "docs" directory and online at https://docs.djangoproject.com/en/stable/. If you're just getting started, here's how we recommend you read the docs:

  • First, read docs/intro/install.txt for instructions on installing Django.
  • Next, work through the tutorials in order (docs/intro/tutorial01.txt, docs/intro/tutorial02.txt, etc.).
  • If you want to set up an actual deployment server, read docs/howto/deployment/index.txt for instructions.
  • You'll probably want to read through the topical guides (in docs/topics) next; from there you can jump to the HOWTOs (in docs/howto) for specific problems, and check out the reference (docs/ref) for gory details.
  • See docs/README for instructions on building an HTML version of the docs.

Docs are updated rigorously. If you find any problems in the docs, or think they should be clarified in any way, please take 30 seconds to fill out a ticket here: https://code.djangoproject.com/newticket

To get more help:

To contribute to Django:

To run Django's test suite:

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - Dogfalo/materialize: Materialize, a CSS Framework based on Material Design
Skip to content
JavaScript CSS HTML
Latest commit f4cdab2 Feb 22, 2018
acburst Merge pull request #5686 from WrDX/material_select-to-formSelect
Rename plugin call material_select() to formSelect()
Permalink
Failed to load latest commit information.
.github Reword issue template to strictly require a test case as well as vers… Feb 10, 2018
css Remove compiled files Apr 21, 2017
dist 1.0.0-alpha.4 Release Feb 19, 2018
extras/noUiSlider 1.0.0-alpha.4 Release Feb 19, 2018
images Removed old showcase items Jul 11, 2017
jade Added prevent scroll option to sidenav and modal Feb 20, 2018
js Added prevent scroll option to sidenav and modal Feb 20, 2018
res Changed CRLF to LF Mar 2, 2015
sass Make autocomplete dropdown display none when empty to prevent ghost d… Feb 10, 2018
templates 1.0.0-alpha.4 Release Feb 19, 2018
test/html Fixed issues with anim and width or height attributes and max-height … Feb 18, 2018
tests/spec rename Select plugin to FormSelect Feb 10, 2018
.editorconfig Update .editorconfig Jun 18, 2017
.eslintrc Use eslint instead of jshint Aug 15, 2017
.gitattributes axed hammer.js Oct 4, 2017
.gitignore fix error when hash contains slash ('/'). Nov 29, 2017
.travis.yml forgot to save that file May 2, 2017
CHANGELOG.md 1.0.0-alpha.4 Release Feb 19, 2018
CNAME custom domain Nov 8, 2014
CODE_OF_CONDUCT.md Added a code of conduct Jul 4, 2017
CONTRIBUTING.md Added a note on the code of conduct Jul 8, 2017
Gruntfile.js Remove lint line from grunt Dec 30, 2017
LICENSE 2017 -> 2018 Jan 3, 2018
README.md Deprecate bower in docs (#5586) Jan 23, 2018
bower.json Remove Roboto font from materialize Nov 7, 2017
fab-toolbar-demo.html Add back fab toolbar demo Apr 21, 2017
package-lock.json update node-sass to 4.7.2 to fix meteor 1.6 package Dec 2, 2017
package.js 1.0.0-alpha.4 Release Feb 19, 2018
package.json 1.0.0-alpha.4 Release Feb 19, 2018
robots.txt Changed CRLF to LF Mar 2, 2015
sitemap.xml Deleted links to nonexistent resources Feb 14, 2018
v1-upgrade-guide.md Rename plugin call material_select() to formSelect() Feb 21, 2018

README.md

MaterializeCSS

Materialize, a CSS Framework based on material design.
-- Browse the docs --

Travis CI badge npm version badge CDNJS version badge dependencies Status badge devDependency Status badge Gitter badge

Table of Contents

Quickstart:

Read the getting started guide for more information on how to use materialize.

  • Download the latest release of materialize directly from GitHub.
  • Clone the repo: git clone https://github.com/Dogfalo/materialize.git
  • Include the files via cdnjs. More here.
  • Install with npm: npm install materialize-css
  • Install with Bower: bower install materialize (DEPRECATED)
  • Install with Atmosphere: meteor add materialize:materialize

Documentation

The documentation can be found at http://materializecss.com. To run the documentation locally on your machine, you need Node.js installed on your computer.

Running documentation locally

Run these commands to set up the documentation:

git clone https://github.com/Dogfalo/materialize
cd materialize
npm install

Then run grunt monitor to compile the documentation. When it finishes, open a new browser window and navigate to localhost:8000. We use BrowserSync to display the documentation.

Documentation for previous releases

Previous releases and their documentation are available for download.

Supported Browsers:

Materialize is compatible with:

  • Chrome 35+
  • Firefox 31+
  • Safari 9+
  • Opera
  • Edge
  • IE 11+

Changelog

For changelogs, check out the Releases section of materialize or the CHANGELOG.md.

Testing

We use Jasmine as our testing framework and we're trying to write a robust test suite for our components. If you want to help, here's a starting guide on how to write tests in Jasmine.

Contributing

Check out the CONTRIBUTING document in the root of the repository to learn how you can contribute. You can also browse the help-wanted tag in our issue tracker to find things to do.

Copyright and license

Code copyright 2017 Materialize. Code released under the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - Microsoft/TypeScript: TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
Skip to content
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
TypeScript HTML PowerShell Groovy Shell Batchfile
Switch branches/tags
Permalink
Failed to load latest commit information.
.circleci Remove unneeded circleci branch in CircleCi config. (#22017) Feb 20, 2018
.vscode Extract Method (squash) Aug 4, 2017
bin Moved LKG folder to lib Jul 27, 2015
doc Update the logo to the one which our website uses. Mar 17, 2017
lib Update LKG (#22085) Feb 21, 2018
scripts Apply 'no-unnecessary-type-assertion' lint rule (#22005) Feb 17, 2018
src Fix bug: don't call `addIndirectUser` if we're not tracking indirect … Feb 22, 2018
tests Fix bug: don't call `addIndirectUser` if we're not tracking indirect … Feb 22, 2018
.editorconfig Use CRLF, not LF. Mar 2, 2015
.gitattributes Never normalize end-of-lines on clone/commit. May 31, 2015
.gitignore configureNightly -> configurePrerelease Jan 20, 2018
.gitmodules Unshallow submodule clones, update submodule ref (#20636) Dec 12, 2017
.mailmap Update authors Jan 30, 2018
.npmignore fix #21252, add package-lock.json to npmignore (#21260) Jan 18, 2018
.travis.yml Add release-2.7 to covered branches Jan 7, 2018
AUTHORS.md Update authors Jan 30, 2018
CONTRIBUTING.md Update CONTRIBUTING.md Jan 8, 2018
CopyrightNotice.txt Baseline public API (#18897) Oct 3, 2017
Gulpfile.ts Apply 'no-unnecessary-type-assertion' lint rule (#22005) Feb 17, 2018
Jakefile.js Apply 'no-unnecessary-type-assertion' lint rule (#22005) Feb 17, 2018
LICENSE.txt Add snapshot of compiler sources Jul 13, 2014
README.md Update README.md Sep 7, 2017
ThirdPartyNoticeText.txt [Transforms] Merge master 07/11 into transform (#9697) Jul 18, 2016
issue_template.md Update issue_template.md Jan 17, 2018
jenkins.sh Update build scripts for npm5 May 30, 2017
netci.groovy Drop node 4, add node 8 for CI (#19617) Oct 31, 2017
package-lock.json type-operator-spacing: Just check for presence of space, not double-s… Jan 8, 2018
package.json Update version (#21319) Jan 24, 2018
pull_request_template.md PR template typo: labeled / labelled (#21854) Feb 10, 2018
tslint.json Apply 'no-unnecessary-type-assertion' lint rule (#22005) Feb 17, 2018

README.md

Build Status npm version Downloads

TypeScript

Join the chat at https://gitter.im/Microsoft/TypeScript

TypeScript is a language for application-scale JavaScript. TypeScript adds optional types, classes, and modules to JavaScript. TypeScript supports tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript. Try it out at the playground, and stay up to date via our blog and Twitter account.

Installing

For the latest stable version:

npm install -g typescript

For our nightly builds:

npm install -g typescript@next

Contribute

There are many ways to contribute to TypeScript.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Documentation

Building

In order to build the TypeScript compiler, ensure that you have Git and Node.js installed.

Clone a copy of the repo:

git clone https://github.com/Microsoft/TypeScript.git

Change to the TypeScript directory:

cd TypeScript

Install Gulp tools and dev dependencies:

npm install -g gulp
npm install

Use one of the following to build and test:

gulp local            # Build the compiler into built/local 
gulp clean            # Delete the built compiler 
gulp LKG              # Replace the last known good with the built one.
                      # Bootstrapping step to be executed when the built compiler reaches a stable state.
gulp tests            # Build the test infrastructure using the built compiler. 
gulp runtests         # Run tests using the built compiler and test infrastructure. 
                      # You can override the host or specify a test for this command. 
                      # Use host=<hostName> or tests=<testPath>. 
gulp runtests-browser # Runs the tests using the built run.js file. Syntax is gulp runtests. Optional
                        parameters 'host=', 'tests=[regex], reporter=[list|spec|json|<more>]'.
gulp baseline-accept  # This replaces the baseline test results with the results obtained from gulp runtests.
gulp lint             # Runs tslint on the TypeScript source.
gulp help             # List the above commands. 

Usage

node built/local/tsc.js hello.ts

Roadmap

For details on our planned features and future direction please refer to our roadmap.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
Skip to content
RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
Java Other

README.md

RxJava: Reactive Extensions for the JVM

codecov.io Maven Central

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.

Version 1.x (Javadoc)

Looking for version 1.x? Jump to the 1.x branch.

Timeline plans for the 1.x line:

  • June 1, 2017 - feature freeze (no new operators), only bugfixes
  • March 31, 2018 - end of life, no further development

Version 2.x (Javadoc)

  • single dependency: Reactive-Streams
  • continued support for Java 6+ & Android 2.3+
  • performance gains through design changes learned through the 1.x cycle and through Reactive-Streams-Commons research project.
  • Java 8 lambda-friendly API
  • non-opinionated about source of concurrency (threads, pools, event loops, fibers, actors, etc)
  • async or synchronous execution
  • virtual time and schedulers for parameterized concurrency

Version 2.x and 1.x will live side-by-side for several years. They will have different group ids (io.reactivex.rxjava2 vs io.reactivex) and namespaces (io.reactivex vs rx).

See the differences between version 1.x and 2.x in the wiki article What's different in 2.0. Learn more about RxJava in general on the Wiki Home.

Getting started

The first step is to include RxJava 2 into your project, for example, as a Gradle compile dependency:

compile "io.reactivex.rxjava2:rxjava:2.x.y"

The second is to write the Hello World program:

package rxjava.examples;

import io.reactivex.*;

public class HelloWorld {
    public static void main(String[] args) {
        Flowable.just("Hello world").subscribe(System.out::println);
    }
}

If your platform doesn't support Java 8 lambdas (yet), you have to create an inner class of Consumer manually:

import io.reactivex.functions.Consumer;

Flowable.just("Hello world")
  .subscribe(new Consumer<String>() {
      @Override public void accept(String s) {
          System.out.println(s);
      }
  });

RxJava 2 features several base classes you can discover operators on:

One of the common use cases for RxJava is to run some computation, network request on a background thread and show the results (or error) on the UI thread:

import io.reactivex.schedulers.Schedulers;

Flowable.fromCallable(() -> {
    Thread.sleep(1000); //  imitate expensive computation
    return "Done";
})
  .subscribeOn(Schedulers.io())
  .observeOn(Schedulers.single())
  .subscribe(System.out::println, Throwable::printStackTrace);

Thread.sleep(2000); // <--- wait for the flow to finish

This style of chaining methods is called a fluent API which resembles the builder pattern. However, RxJava's reactive types are immutable; each of the method calls returns a new Flowable with added behavior. To illustrate, the example can be rewritten as follows:

Flowable<String> source = Flowable.fromCallable(() -> {
    Thread.sleep(1000); //  imitate expensive computation
    return "Done";
});

Flowable<String> runBackground = source.subscribeOn(Schedulers.io());

Flowable<String> showForeground = runBackground.observeOn(Schedulers.single());

showForeground.subscribe(System.out::println, Throwable::printStackTrace);

Thread.sleep(2000);

Typically, you can move computations or blocking IO to some other thread via subscribeOn. Once the data is ready, you can make sure they get processed on the foreground or GUI thread via observeOn.

RxJava operators don't work with Threads or ExecutorServices directly but with so called Schedulers that abstract away sources of concurrency behind an uniform API. RxJava 2 features several standard schedulers accessible via Schedulers utility class. These are available on all JVM platforms but some specific platforms, such as Android, have their own typical Schedulers defined: AndroidSchedulers.mainThread(), SwingScheduler.instance() or JavaFXSchedulers.gui().

The Thread.sleep(2000); at the end is no accident. In RxJava the default Schedulers run on daemon threads, which means once the Java main thread exits, they all get stopped and background computations may never happen. Sleeping for some time in this example situations lets you see the output of the flow on the console with time to spare.

Flows in RxJava are sequential in nature split into processing stages that may run concurrently with each other:

Flowable.range(1, 10)
  .observeOn(Schedulers.computation())
  .map(v -> v * v)
  .blockingSubscribe(System.out::println);

This example flow squares the numbers from 1 to 10 on the computation Scheduler and consumes the results on the "main" thread (more precisely, the caller thread of blockingSubscribe). However, the lambda v -> v * v doesn't run in parallel for this flow; it receives the values 1 to 10 on the same computation thread one after the other.

Processing the numbers 1 to 10 in parallel is a bit more involved:

Flowable.range(1, 10)
  .flatMap(v ->
      Flowable.just(v)
        .subscribeOn(Schedulers.computation())
        .map(w -> w * w)
  )
  .blockingSubscribe(System.out::println);

Practically, paralellism in RxJava means running independent flows and merging their results back into a single flow. The operator flatMap does this by first mapping each number from 1 to 10 into its own individual Flowable, runs them and merges the computed squares.

Starting from 2.0.5, there is an experimental operator parallel() and type ParallelFlowable that helps achieve the same parallel processing pattern:

Flowable.range(1, 10)
  .parallel()
  .runOn(Schedulers.computation())
  .map(v -> v * v)
  .sequential()
  .blockingSubscribe(System.out::println);

flatMap is a powerful operator and helps in a lot of situations. For example, given a service that returns a Flowable, we'd like to call another service with values emitted by the first service:

Flowable<Inventory> inventorySource = warehouse.getInventoryAsync();

inventorySource.flatMap(inventoryItem ->
    erp.getDemandAsync(inventoryItem.getId())
    .map(demand 
        -> System.out.println("Item " + inventoryItem.getName() + " has demand " + demand));
  )
  .subscribe();

Note, however, that flatMap doesn't guarantee any order and the end result from the inner flows may end up interleaved. There are alternative operators:

  • concatMap that maps and runs one inner flow at a time and
  • concatMapEager which runs all inner flows "at once" but the output flow will be in the order those inner flows were created.

For further details, consult the wiki.

Communication

Versioning

Version 2.x is now considered stable and final. Version 1.x will be supported for several years along with 2.x. Enhancements and bugfixes will be synchronized between the two in a timely manner.

Minor 2.x increments (such as 2.1, 2.2, etc) will occur when non-trivial new functionality is added or significant enhancements or bug fixes occur that may have behavioral changes that may affect some edge cases (such as dependence on behavior resulting from a bug). An example of an enhancement that would classify as this is adding reactive pull backpressure support to an operator that previously did not support it. This should be backwards compatible but does behave differently.

Patch 2.x.y increments (such as 2.0.0 -> 2.0.1, 2.3.1 -> 2.3.2, etc) will occur for bug fixes and trivial functionality (like adding a method overload). New functionality marked with an @Beta or @Experimental annotation can also be added in patch releases to allow rapid exploration and iteration of unstable new functionality.

@Beta

APIs marked with the @Beta annotation at the class or method level are subject to change. They can be modified in any way, or even removed, at any time. If your code is a library itself (i.e. it is used on the CLASSPATH of users outside your own control), you should not use beta APIs, unless you repackage them (e.g. using ProGuard, shading, etc).

@Experimental

APIs marked with the @Experimental annotation at the class or method level will almost certainly change. They can be modified in any way, or even removed, at any time. You should not use or rely on them in any production code. They are purely to allow broad testing and feedback.

@Deprecated

APIs marked with the @Deprecated annotation at the class or method level will remain supported until the next major release but it is recommended to stop using them.

io.reactivex.internal.*

All code inside the io.reactivex.internal.* packages is considered private API and should not be relied upon at all. It can change at any time.

Full Documentation

Binaries

Binaries and dependency information for Maven, Ivy, Gradle and others can be found at http://search.maven.org.

Example for Gradle:

compile 'io.reactivex.rxjava2:rxjava:x.y.z'

and for Maven:

<dependency>
    <groupId>io.reactivex.rxjava2</groupId>
    <artifactId>rxjava</artifactId>
    <version>x.y.z</version>
</dependency>

and for Ivy:

<dependency org="io.reactivex.rxjava2" name="rxjava" rev="x.y.z" />

Snapshots are available via https://oss.jfrog.org/libs-snapshot/io/reactivex/rxjava2/rxjava/

repositories {
    maven { url 'https://oss.jfrog.org/libs-snapshot' }
}

dependencies {
    compile 'io.reactivex.rxjava2:rxjava:2.2.0-SNAPSHOT'
}

Build

To build:

$ git clone git@github.com:ReactiveX/RxJava.git
$ cd RxJava/
$ ./gradlew build

Further details on building can be found on the Getting Started page of the wiki.

Bugs and Feedback

For bugs, questions and discussions please use the Github Issues.

LICENSE

Copyright (c) 2016-present, RxJava Contributors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - NARKOZ/hacker-scripts: Based on a true story
Skip to content
Based on a true story
JavaScript Python Java Perl PowerShell Ruby Other
Switch branches/tags
Nothing to show
Latest commit 64f2d1b May 9, 2017
NARKOZ committed May 9, 2017 Merge pull request #132 from ww40/patch-1
Update fucking_coffee.psm1

README.md

Hacker Scripts

Based on a true story:

xxx: OK, so, our build engineer has left for another company. The dude was literally living inside the terminal. You know, that type of a guy who loves Vim, creates diagrams in Dot and writes wiki-posts in Markdown... If something - anything - requires more than 90 seconds of his time, he writes a script to automate that.

xxx: So we're sitting here, looking through his, uhm, "legacy"

xxx: You're gonna love this

xxx: smack-my-bitch-up.sh - sends a text message "late at work" to his wife (apparently). Automatically picks reasons from an array of strings, randomly. Runs inside a cron-job. The job fires if there are active SSH-sessions on the server after 9pm with his login.

xxx: kumar-asshole.sh - scans the inbox for emails from "Kumar" (a DBA at our clients). Looks for keywords like "help", "trouble", "sorry" etc. If keywords are found - the script SSHes into the clients server and rolls back the staging database to the latest backup. Then sends a reply "no worries mate, be careful next time".

xxx: hangover.sh - another cron-job that is set to specific dates. Sends automated emails like "not feeling well/gonna work from home" etc. Adds a random "reason" from another predefined array of strings. Fires if there are no interactive sessions on the server at 8:45am.

xxx: (and the oscar goes to) fucking-coffee.sh - this one waits exactly 17 seconds (!), then opens a telnet session to our coffee-machine (we had no frikin idea the coffee machine is on the network, runs linux and has a TCP socket up and running) and sends something like sys brew. Turns out this thing starts brewing a mid-sized half-caf latte and waits another 24 (!) seconds before pouring it into a cup. The timing is exactly how long it takes to walk to the machine from the dudes desk.

xxx: holy sh*t I'm keeping those

Original: http://bash.im/quote/436725 (in Russian)
Pull requests with other implementations (Python, Perl, Shell, etc) are welcome.

Usage

You need these environment variables:

# used in `smack-my-bitch-up` and `hangover` scripts
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

# used in `kumar_asshole` script
GMAIL_USERNAME=admin@example.org
GMAIL_PASSWORD=password

For Ruby scripts you need to install gems: gem install dotenv twilio-ruby gmail

Cron jobs

# Runs `smack-my-bitch-up.sh` monday to friday at 9:20 pm.
20 21 * * 1-5 /path/to/scripts/smack-my-bitch-up.sh >> /path/to/smack-my-bitch-up.log 2>&1

# Runs `hangover.sh` monday to friday at 8:45 am.
45 8 * * 1-5 /path/to/scripts/hangover.sh >> /path/to/hangover.log 2>&1

# Runs `kumar-asshole.sh` every 10 minutes.
*/10 * * * * /path/to/scripts/kumar-asshole.sh

# Runs `fucking-coffee.sh` hourly from 9am to 6pm on weekdays.
0 9-18 * * 1-5 /path/to/scripts/fucking-coffee.sh

Code is released under WTFPL.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - AFNetworking/AFNetworking: A delightful networking framework for iOS, macOS, watchOS, and tvOS.
Skip to content
A delightful networking framework for iOS, macOS, watchOS, and tvOS.
Objective-C Swift Ruby
Latest commit e976d63 Jan 27, 2018
SlaunchaMan committed Jan 27, 2018 Merge pull request #4138 from AFNetworking/unguarded-availability
Use @available if available to silence a warning.

README.md

AFNetworking

Build Status codecov.io CocoaPods Compatible Carthage Compatible Platform Twitter

AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvOS. It's built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use.

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did!

How To Get Started

Communication

  • If you need help, use Stack Overflow. (Tag 'afnetworking')
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, and can provide steps to reliably reproduce it, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

AFNetworking supports multiple methods for installing the library in a project.

Installation with CocoaPods

CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the "Getting Started" guide for more information. You can install it with the following command:

$ gem install cocoapods

CocoaPods 0.39.0+ is required to build AFNetworking 3.0.0+.

Podfile

To integrate AFNetworking into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
pod 'AFNetworking', '~> 3.0'
end

Then, run the following command:

$ pod install

Installation with Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate AFNetworking into your Xcode project using Carthage, specify it in your Cartfile:

github "AFNetworking/AFNetworking" ~> 3.0

Run carthage to build the framework and drag the built AFNetworking.framework into your Xcode project.

Requirements

AFNetworking Version Minimum iOS Target Minimum macOS Target Minimum watchOS Target Minimum tvOS Target Notes
3.x iOS 7 OS X 10.9 watchOS 2.0 tvOS 9.0 Xcode 7+ is required. NSURLConnectionOperation support has been removed.
2.6 -> 2.6.3 iOS 7 OS X 10.9 watchOS 2.0 n/a Xcode 7+ is required.
2.0 -> 2.5.4 iOS 6 OS X 10.8 n/a n/a Xcode 5+ is required. NSURLSession subspec requires iOS 7 or OS X 10.9.
1.x iOS 5 Mac OS X 10.7 n/a n/a
0.10.x iOS 4 Mac OS X 10.6 n/a n/a

(macOS projects must support 64-bit with modern Cocoa runtime).

Programming in Swift? Try Alamofire for a more conventional set of APIs.

Architecture

NSURLSession

  • AFURLSessionManager
  • AFHTTPSessionManager

Serialization

  • <AFURLRequestSerialization>
    • AFHTTPRequestSerializer
    • AFJSONRequestSerializer
    • AFPropertyListRequestSerializer
  • <AFURLResponseSerialization>
    • AFHTTPResponseSerializer
    • AFJSONResponseSerializer
    • AFXMLParserResponseSerializer
    • AFXMLDocumentResponseSerializer (macOS)
    • AFPropertyListResponseSerializer
    • AFImageResponseSerializer
    • AFCompoundResponseSerializer

Additional Functionality

  • AFSecurityPolicy
  • AFNetworkReachabilityManager

Usage

AFURLSessionManager

AFURLSessionManager creates and manages an NSURLSession object based on a specified NSURLSessionConfiguration object, which conforms to <NSURLSessionTaskDelegate>, <NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>, and <NSURLSessionDelegate>.

Creating a Download Task

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];

Creating an Upload Task

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Success: %@ %@", response, responseObject);
    }
}];
[uploadTask resume];

Creating an Upload Task for a Multi-Part Request, with Progress

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
    } error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      //Update the progress view
                      [progressView setProgress:uploadProgress.fractionCompleted];
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                  }
              }];

[uploadTask resume];

Creating a Data Task

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
[dataTask resume];

Request Serialization

Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body.

NSString *URLString = @"http://example.com";
NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};

Query String Parameter Encoding

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3

URL Form Parameter Encoding

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/
Content-Type: application/x-www-form-urlencoded

foo=bar&baz[]=1&baz[]=2&baz[]=3

JSON Parameter Encoding

[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/
Content-Type: application/json

{"foo": "bar", "baz": [1,2,3]}

Network Reachability Manager

AFNetworkReachabilityManager monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.

  • Do not use Reachability to determine if the original request should be sent.
    • You should try to send it.
  • You can use Reachability to determine when a request should be automatically retried.
    • Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something.
  • Network reachability is a useful tool for determining why a request might have failed.
    • After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out."

See also WWDC 2012 session 706, "Networking Best Practices.".

Shared Network Reachability

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

Security Policy

AFSecurityPolicy evaluates server trust against pinned X.509 certificates and public keys over secure connections.

Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.

Allowing Invalid SSL Certificates

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production

Unit Tests

AFNetworking includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test.

Credits

AFNetworking is owned and maintained by the Alamofire Software Foundation.

AFNetworking was originally created by Scott Raymond and Mattt Thompson in the development of Gowalla for iPhone.

AFNetworking's logo was designed by Alan Defibaugh.

And most of all, thanks to AFNetworking's growing list of contributors.

Security Disclosure

If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.

License

AFNetworking is released under the MIT license. See LICENSE for details.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - josephmisiti/awesome-machine-learning: A curated list of awesome Machine Learning frameworks, libraries and software.
Skip to content
A curated list of awesome Machine Learning frameworks, libraries and software.
Python
Switch branches/tags
Nothing to show
Latest commit 162f8fb Feb 12, 2018
josephmisiti Merge pull request #476 from jgreenemi/mlsearchengine
Add entry for MLPleaseHelp under JavaScript.

README.md

Awesome Machine Learning Awesome

A curated list of awesome machine learning frameworks, libraries and software (by language). Inspired by awesome-php.

If you want to contribute to this list (please do), send me a pull request or contact me @josephmisiti. Also, a listed repository should be deprecated if:

  • Repository's owner explicitly say that "this library is not maintained".
  • Not committed for long time (2~3 years).

Further resources:

  • For a list of free machine learning books available for download, go here.

  • For a list of (mostly) free machine learning courses available online, go here.

  • For a list of blogs on data science and machine learning, go here.

  • For a list of free-to-attend meetups and local events, go here.

Table of Contents

APL

General-Purpose Machine Learning

  • naive-apl - Naive Bayesian Classifier implementation in APL.

C

General-Purpose Machine Learning

  • Darknet - Darknet is an open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.
  • Recommender - A C library for product recommendations/suggestions using collaborative filtering (CF).
  • Hybrid Recommender System - A hybrid recommender system based upon scikit-learn algorithms.

Computer Vision

  • CCV - C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library.
  • VLFeat - VLFeat is an open and portable library of computer vision algorithms, which has Matlab toolbox.

Speech Recognition

  • HTK -The Hidden Markov Model Toolkit (HTK) is a portable toolkit for building and manipulating hidden Markov models.

C++

Computer Vision

  • DLib - DLib has C++ and Python interfaces for face detection and training general object detectors.
  • EBLearn - Eblearn is an object-oriented C++ library that implements various machine learning models
  • OpenCV - OpenCV has C++, C, Python, Java and MATLAB interfaces and supports Windows, Linux, Android and Mac OS.
  • VIGRA - VIGRA is a generic cross-platform C++ computer vision and machine learning library for volumes of arbitrary dimensionality with Python bindings.

General-Purpose Machine Learning

  • BanditLib - A simple Multi-armed Bandit library.
  • Caffe - A deep learning framework developed with cleanliness, readability, and speed in mind. [DEEP LEARNING]
  • CatBoost - General purpose gradient boosting on decision trees library with categorical features support out of the box. It is easy to install, contains fast inference implementation and supports CPU and GPU (even multi-GPU) computation.
  • CNTK - The Computational Network Toolkit (CNTK) by Microsoft Research, is a unified deep-learning toolkit that describes neural networks as a series of computational steps via a directed graph.
  • CUDA - This is a fast C++/CUDA implementation of convolutional [DEEP LEARNING]
  • CXXNET - Yet another deep learning framework with less than 1000 lines core code [DEEP LEARNING]
  • DeepDetect - A machine learning API and server written in C++11. It makes state of the art machine learning easy to work with and integrate into existing applications.
  • Distributed Machine learning Tool Kit (DMTK) - A distributed machine learning (parameter server) framework by Microsoft. Enables training models on large data sets across multiple machines. Current tools bundled with it include: LightLDA and Distributed (Multisense) Word Embedding.
  • DLib - A suite of ML tools designed to be easy to imbed in other applications.
  • DSSTNE - A software library created by Amazon for training and deploying deep neural networks using GPUs which emphasizes speed and scale over experimental flexibility.
  • DyNet - A dynamic neural network library working well with networks that have dynamic structures that change for every training instance. Written in C++ with bindings in Python.
  • encog-cpp
  • Fido - A highly-modular C++ machine learning library for embedded electronics and robotics.
  • igraph - General purpose graph library.
  • Intel(R) DAAL - A high performance software library developed by Intel and optimized for Intel's architectures. Library provides algorithmic building blocks for all stages of data analytics and allows to process data in batch, online and distributed modes.
  • LightGBM - Microsoft's fast, distributed, high performance gradient boosting (GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.
  • libfm - A generic approach that allows to mimic most factorization models by feature engineering.
  • MLDB - The Machine Learning Database is a database designed for machine learning. Send it commands over a RESTful API to store data, explore it using SQL, then train machine learning models and expose them as APIs.
  • mlpack - A scalable C++ machine learning library.
  • proNet-core - A general-purpose network embedding framework: pair-wise representations optimization Network Edit.
  • ROOT - A modular scientific software framework. It provides all the functionalities needed to deal with big data processing, statistical analysis, visualization and storage.
  • shark - A fast, modular, feature-rich open-source C++ machine learning library.
  • Shogun - The Shogun Machine Learning Toolbox.
  • sofia-ml - Suite of fast incremental algorithms.
  • Stan - A probabilistic programming language implementing full Bayesian statistical inference with Hamiltonian Monte Carlo sampling.
  • Timbl - A software package/C++ library implementing several memory-based learning algorithms, among which IB1-IG, an implementation of k-nearest neighbor classification, and IGTree, a decision-tree approximation of IB1-IG. Commonly used for NLP.
  • Vowpal Wabbit (VW) - A fast out-of-core learning system.
  • Warp-CTC - A fast parallel implementation of Connectionist Temporal Classification (CTC), on both CPU and GPU.
  • XGBoost - A parallelized optimized general purpose gradient boosting library.
  • LKYDeepNN - A header-only C++11 Neural Network library. Low dependency, native traditional chinese document.

Natural Language Processing

  • BLLIP Parser - BLLIP Natural Language Parser (also known as the Charniak-Johnson parser).
  • colibri-core - C++ library, command line tools, and Python binding for extracting and working with basic linguistic constructions such as n-grams and skipgrams in a quick and memory-efficient way.
  • CRF++ - Open source implementation of Conditional Random Fields (CRFs) for segmenting/labeling sequential data & other Natural Language Processing tasks.
  • CRFsuite - CRFsuite is an implementation of Conditional Random Fields (CRFs) for labeling sequential data.
  • frog - Memory-based NLP suite developed for Dutch: PoS tagger, lemmatiser, dependency parser, NER, shallow parser, morphological analyzer.
  • libfolia - C++ library for the FoLiA format
  • MeTA - MeTA : ModErn Text Analysis is a C++ Data Sciences Toolkit that facilitates mining big text data.
  • MIT Information Extraction Toolkit - C, C++, and Python tools for named entity recognition and relation extraction
  • ucto - Unicode-aware regular-expression based tokenizer for various languages. Tool and C++ library. Supports FoLiA format.

Speech Recognition

  • Kaldi - Kaldi is a toolkit for speech recognition written in C++ and licensed under the Apache License v2.0. Kaldi is intended for use by speech recognition researchers.

Sequence Analysis

  • ToPS - This is an objected-oriented framework that facilitates the integration of probabilistic models for sequences over a user defined alphabet.

Gesture Detection

  • grt - The Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, C++ machine learning library designed for real-time gesture recognition.

Common Lisp

General-Purpose Machine Learning

  • mgl - Neural networks (boltzmann machines, feed-forward and recurrent nets), Gaussian Processes.
  • mgl-gpr - Evolutionary algorithms.
  • cl-libsvm - Wrapper for the libsvm support vector machine library.
  • cl-online-learning - Online learning algorithms (Perceptron, AROW, SCW, Logistic Regression).
  • cl-random-forest - Implementation of Random Forest in Common Lisp.

Clojure

Natural Language Processing

  • Clojure-openNLP - Natural Language Processing in Clojure (opennlp).
  • Infections-clj - Rails-like inflection library for Clojure and ClojureScript.

General-Purpose Machine Learning

  • Touchstone - Clojure A/B testing library.
  • Clojush - The Push programming language and the PushGP genetic programming system implemented in Clojure.
  • Infer - Inference and machine learning in Clojure.
  • Clj-ML - A machine learning library for Clojure built on top of Weka and friends.
  • DL4CLJ - Clojure wrapper for Deeplearning4j.
  • Encog - Clojure wrapper for Encog (v3) (Machine-Learning framework that specializes in neural-nets).
  • Fungp - A genetic programming library for Clojure.
  • Statistiker - Basic Machine Learning algorithms in Clojure.
  • clortex - General Machine Learning library using Numenta’s Cortical Learning Algorithm.
  • comportex - Functionally composable Machine Learning library using Numenta’s Cortical Learning Algorithm.
  • cortex - Neural networks, regression and feature learning in Clojure.
  • lambda-ml - Simple, concise implementations of machine learning techniques and utilities in Clojure.

Data Analysis / Data Visualization

  • Incanter - Incanter is a Clojure-based, R-like platform for statistical computing and graphics.
  • PigPen - Map-Reduce for Clojure.
  • Envision - Clojure Data Visualisation library, based on Statistiker and D3.

Crystal

General-Purpose Machine Learning

  • machine - Simple machine learning algorithm.
  • crystal-fann - FANN (Fast Artifical Neural Network) binding.

Elixir

General-Purpose Machine Learning

  • Simple Bayes - A Simple Bayes / Naive Bayes implementation in Elixir.

Natural Language Processing

  • Stemmer - An English (Porter2) stemming implementation in Elixir.

Erlang

General-Purpose Machine Learning

  • Disco - Map Reduce in Erlang.
  • Yanni - ANN neural networks using Erlangs leightweight processes.

Go

Natural Language Processing

  • go-porterstemmer - A native Go clean room implementation of the Porter Stemming algorithm.
  • paicehusk - Golang implementation of the Paice/Husk Stemming Algorithm.
  • snowball - Snowball Stemmer for Go.
  • Textbox - Natural langauge processing SDK from Machine Box
  • go-ngram - In-memory n-gram index with compression.
  • word-embedding - Word Embeddings: the full implementation of word2vec, GloVe in Go.
  • sentences - Golang implementation of Punkt sentence tokenizer.

General-Purpose Machine Learning

  • gago - Multi-population, flexible, parallel genetic algorithm.
  • Go Learn - Machine Learning for Go.
  • go-pr - Pattern recognition package in Go lang.
  • go-ml - Linear / Logistic regression, Neural Networks, Collaborative Filtering and Gaussian Multivariate Distribution.
  • bayesian - Naive Bayesian Classification for Golang.
  • go-galib - Genetic Algorithms library written in Go / Golang.
  • Cloudforest - Ensembles of decision trees in Go/Golang.
  • gobrain - Neural Networks written in Go.
  • GoNN - GoNN is an implementation of Neural Network in Go Language, which includes BPNN, RBF, PCN.
  • MXNet - Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • go-mxnet-predictor - Go binding for MXNet c_predict_api to do inference with pre-trained model.
  • neat - Plug-and-play, parallel Go framework for NeuroEvolution of Augmenting Topologies (NEAT).

Data Analysis / Data Visualization

  • go-graph - Graph library for Go/Golang language.
  • SVGo - The Go Language library for SVG generation.
  • RF - Random forests implementation in Go.
  • Glot - Glot is a plotting library for Golang built on top of gnuplot.

Facial Detection and Recognition

  • Facebox - Facial detection and recognition SDK with one-shot teaching from Machine Box

Image Classification

  • Tagbox - Image classification SDK with one-shot teaching from Machine Box
  • Nudebox - Nudity detection from Machine Box

Haskell

General-Purpose Machine Learning

  • haskell-ml - Haskell implementations of various ML algorithms.
  • HLearn - a suite of libraries for interpreting machine learning models according to their algebraic structure.
  • hnn - Haskell Neural Network library.
  • hopfield-networks - Hopfield Networks for unsupervised learning in Haskell.
  • caffegraph - A DSL for deep neural networks.
  • LambdaNet - Configurable Neural Networks in Haskell.

Java

Natural Language Processing

  • Cortical.io - Retina: an API performing complex NLP operations (disambiguation, classification, streaming text filtering, etc...) as quickly and intuitively as the brain.
  • IRIS - Cortical.io's FREE NLP, Retina API Analysis Tool (written in JavaFX!) - See the Tutorial Video.
  • CoreNLP - Stanford CoreNLP provides a set of natural language analysis tools which can take raw English language text input and give the base forms of words.
  • Stanford Parser - A natural language parser is a program that works out the grammatical structure of sentences.
  • Stanford POS Tagger - A Part-Of-Speech Tagger (POS Tagger).
  • Stanford Name Entity Recognizer - Stanford NER is a Java implementation of a Named Entity Recognizer.
  • Stanford Word Segmenter - Tokenization of raw text is a standard pre-processing step for many NLP tasks.
  • Tregex, Tsurgeon and Semgrex - Tregex is a utility for matching patterns in trees, based on tree relationships and regular expression matches on nodes (the name is short for "tree regular expressions").
  • Stanford Phrasal: A Phrase-Based Translation System
  • Stanford English Tokenizer - Stanford Phrasal is a state-of-the-art statistical phrase-based machine translation system, written in Java.
  • Stanford Tokens Regex - A tokenizer divides text into a sequence of tokens, which roughly correspond to "words".
  • Stanford Temporal Tagger - SUTime is a library for recognizing and normalizing time expressions.
  • Stanford SPIED - Learning entities from unlabeled text starting with seed sets using patterns in an iterative fashion.
  • Stanford Topic Modeling Toolbox - Topic modeling tools to social scientists and others who wish to perform analysis on datasets.
  • Twitter Text Java - A Java implementation of Twitter's text processing library.
  • MALLET - A Java-based package for statistical natural language processing, document classification, clustering, topic modeling, information extraction, and other machine learning applications to text.
  • OpenNLP - a machine learning based toolkit for the processing of natural language text.
  • LingPipe - A tool kit for processing text using computational linguistics.
  • ClearTK - ClearTK provides a framework for developing statistical natural language processing (NLP) components in Java and is built on top of Apache UIMA.
  • Apache cTAKES - Apache clinical Text Analysis and Knowledge Extraction System (cTAKES) is an open-source natural language processing system for information extraction from electronic medical record clinical free-text.
  • ClearNLP - The ClearNLP project provides software and resources for natural language processing. The project started at the Center for Computational Language and EducAtion Research, and is currently developed by the Center for Language and Information Research at Emory University. This project is under the Apache 2 license.
  • CogcompNLP - This project collects a number of core libraries for Natural Language Processing (NLP) developed in the University of Illinois' Cognitive Computation Group, for example illinois-core-utilities which provides a set of NLP-friendly data structures and a number of NLP-related utilities that support writing NLP applications, running experiments, etc, illinois-edison a library for feature extraction from illinois-core-utilities data structures and many other packages.

General-Purpose Machine Learning

  • aerosolve - A machine learning library by Airbnb designed from the ground up to be human friendly.
  • AMIDST Toolbox - A Java Toolbox for Scalable Probabilistic Machine Learning.
  • Datumbox - Machine Learning framework for rapid development of Machine Learning and Statistical applications.
  • ELKI - Java toolkit for data mining. (unsupervised: clustering, outlier detection etc.)
  • Encog - An advanced neural network and machine learning framework. Encog contains classes to create a wide variety of networks, as well as support classes to normalize and process data for these neural networks. Encog trains using multithreaded resilient propagation. Encog can also make use of a GPU to further speed processing time. A GUI based workbench is also provided to help model and train neural networks.
  • FlinkML in Apache Flink - Distributed machine learning library in Flink.
  • H2O - ML engine that supports distributed learning on Hadoop, Spark or your laptop via APIs in R, Python, Scala, REST/JSON.
  • htm.java - General Machine Learning library using Numenta’s Cortical Learning Algorithm.
  • java-deeplearning - Distributed Deep Learning Platform for Java, Clojure, Scala.
  • Mahout - Distributed machine learning.
  • Meka - An open source implementation of methods for multi-label classification and evaluation (extension to Weka).
  • MLlib in Apache Spark - Distributed machine learning library in Spark
  • Hydrosphere Mist - a service for deployment Apache Spark MLLib machine learning models as realtime, batch or reactive web services.
  • Neuroph - Neuroph is lightweight Java neural network framework
  • ORYX - Lambda Architecture Framework using Apache Spark and Apache Kafka with a specialization for real-time large-scale machine learning.
  • Samoa SAMOA is a framework that includes distributed machine learning for data streams with an interface to plug-in different stream processing platforms.
  • RankLib - RankLib is a library of learning to rank algorithms.
  • rapaio - statistics, data mining and machine learning toolbox in Java.
  • RapidMiner - RapidMiner integration into Java code.
  • Stanford Classifier - A classifier is a machine learning tool that will take data items and place them into one of k classes.
  • SmileMiner - Statistical Machine Intelligence & Learning Engine.
  • SystemML - flexible, scalable machine learning (ML) language.
  • WalnutiQ - object oriented model of the human brain.
  • Weka - Weka is a collection of machine learning algorithms for data mining tasks.
  • LBJava - Learning Based Java is a modeling language for the rapid development of software systems, offers a convenient, declarative syntax for classifier and constraint definition directly in terms of the objects in the programmer's application.

Speech Recognition

  • CMU Sphinx - Open Source Toolkit For Speech Recognition purely based on Java speech recognition library.

Data Analysis / Data Visualization

  • Flink - Open source platform for distributed stream and batch data processing.
  • Hadoop - Hadoop/HDFS.
  • Onyx - Distributed, masterless, high performance, fault tolerant data processing. Written entirely in Clojure.
  • Spark - Spark is a fast and general engine for large-scale data processing.
  • Storm - Storm is a distributed realtime computation system.
  • Impala - Real-time Query for Hadoop.
  • DataMelt - Mathematics software for numeric computation, statistics, symbolic calculations, data analysis and data visualization.
  • Dr. Michael Thomas Flanagan's Java Scientific Library

Deep Learning

  • Deeplearning4j - Scalable deep learning for industry with parallel GPUs.

Javascript

Natural Language Processing

  • Twitter-text - A JavaScript implementation of Twitter's text processing library.
  • natural - General natural language facilities for node.
  • Knwl.js - A Natural Language Processor in JS.
  • Retext - Extensible system for analyzing and manipulating natural language.
  • NLP Compromise - Natural Language processing in the browser.

Data Analysis / Data Visualization

General-Purpose Machine Learning

  • Convnet.js - ConvNetJS is a Javascript library for training Deep Learning models[DEEP LEARNING]
  • Clusterfck - Agglomerative hierarchical clustering implemented in Javascript for Node.js and the browser.
  • Clustering.js - Clustering algorithms implemented in Javascript for Node.js and the browser.
  • Decision Trees - NodeJS Implementation of Decision Tree using ID3 Algorithm.
  • DN2A - Digital Neural Networks Architecture.
  • figue - K-means, fuzzy c-means and agglomerative clustering.
  • Gaussian Mixture Model - Unsupervised machine learning with multivariate Gaussian mixture model.
  • Node-fann - FANN (Fast Artificial Neural Network Library) bindings for Node.js
  • Keras.js - Run Keras models in the browser, with GPU support provided by WebGL 2.
  • Kmeans.js - Simple Javascript implementation of the k-means algorithm, for node.js and the browser.
  • LDA.js - LDA topic modeling for Node.js
  • Learning.js - Javascript implementation of logistic regression/c4.5 decision tree
  • Machine Learning - Machine learning library for Node.js
  • machineJS - Automated machine learning, data formatting, ensembling, and hyperparameter optimization for competitions and exploration- just give it a .csv file!
  • mil-tokyo - List of several machine learning libraries.
  • Node-SVM - Support Vector Machine for Node.js
  • Brain - Neural networks in JavaScript [Deprecated]
  • Brain.js - Neural networks in JavaScript - continued community fork of Brain.
  • Bayesian-Bandit - Bayesian bandit implementation for Node and the browser.
  • Synaptic - Architecture-free neural network library for Node.js and the browser.
  • kNear - JavaScript implementation of the k nearest neighbors algorithm for supervised learning.
  • NeuralN - C++ Neural Network library for Node.js. It has advantage on large dataset and multi-threaded training.
  • kalman - Kalman filter for Javascript.
  • shaman - Node.js library with support for both simple and multiple linear regression.
  • ml.js - Machine learning and numerical analysis tools for Node.js and the Browser!
  • Pavlov.js - Reinforcement learning using Markov Decision Processes.
  • MXNet - Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • deeplearnjs - A hardware-accelerated machine intelligence library for the web
  • JSMLT - Machine learning toolkit with classification and clustering for Node.js; supports visualization (see visualml.io).

Misc

  • stdlib - A standard library for JavaScript and Node.js, with an emphasis on numeric computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.
  • sylvester - Vector and Matrix math for JavaScript.
  • simple-statistics - A JavaScript implementation of descriptive, regression, and inference statistics. Implemented in literate JavaScript with no dependencies, designed to work in all modern browsers (including IE) as well as in Node.js.
  • regression-js - A javascript library containing a collection of least squares fitting methods for finding a trend in a set of data.
  • Lyric - Linear Regression library.
  • GreatCircle - Library for calculating great circle distance.
  • MLPleaseHelp - MLPleaseHelp is a simple ML resource search engine. You can use this search engine right now at https://jgreenemi.github.io/MLPleaseHelp/, provided via Github Pages.

Julia

General-Purpose Machine Learning

  • MachineLearning - Julia Machine Learning library.
  • MLBase - A set of functions to support the development of machine learning algorithms.
  • PGM - A Julia framework for probabilistic graphical models.
  • DA - Julia package for Regularized Discriminant Analysis.
  • Regression - Algorithms for regression analysis (e.g. linear regression and logistic regression).
  • Local Regression - Local regression, so smooooth!.
  • Naive Bayes - Simple Naive Bayes implementation in Julia.
  • Mixed Models - A Julia package for fitting (statistical) mixed-effects models.
  • Simple MCMC - basic mcmc sampler implemented in Julia.
  • Distance - Julia module for Distance evaluation.
  • Decision Tree - Decision Tree Classifier and Regressor.
  • Neural - A neural network in Julia.
  • MCMC - MCMC tools for Julia.
  • Mamba - Markov chain Monte Carlo (MCMC) for Bayesian analysis in Julia.
  • GLM - Generalized linear models in Julia.
  • Gaussian Processes - Julia package for Gaussian processes.
  • Online Learning
  • GLMNet - Julia wrapper for fitting Lasso/ElasticNet GLM models using glmnet.
  • Clustering - Basic functions for clustering data: k-means, dp-means, etc.
  • SVM - SVM's for Julia.
  • Kernel Density - Kernel density estimators for julia.
  • Dimensionality Reduction - Methods for dimensionality reduction.
  • NMF - A Julia package for non-negative matrix factorization.
  • ANN - Julia artificial neural networks.
  • Mocha - Deep Learning framework for Julia inspired by Caffe.
  • XGBoost - eXtreme Gradient Boosting Package in Julia.
  • ManifoldLearning - A Julia package for manifold learning and nonlinear dimensionality reduction.
  • MXNet - Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • Merlin - Flexible Deep Learning Framework in Julia.
  • ROCAnalysis - Receiver Operating Characteristics and functions for evaluation probabilistic binary classifiers.
  • GaussianMixtures - Large scale Gaussian Mixture Models.
  • ScikitLearn - Julia implementation of the scikit-learn API.
  • Knet - Koç University Deep Learning Framework.

Natural Language Processing

Data Analysis / Data Visualization

  • Graph Layout - Graph layout algorithms in pure Julia.
  • LightGraphs - Graph modeling and analysis.
  • Data Frames Meta - Metaprogramming tools for DataFrames.
  • Julia Data - library for working with tabular data in Julia.
  • Data Read - Read files from Stata, SAS, and SPSS.
  • Hypothesis Tests - Hypothesis tests for Julia.
  • Gadfly - Crafty statistical graphics for Julia.
  • Stats - Statistical tests for Julia.
  • RDataSets - Julia package for loading many of the data sets available in R.
  • DataFrames - library for working with tabular data in Julia.
  • Distributions - A Julia package for probability distributions and associated functions.
  • Data Arrays - Data structures that allow missing values.
  • Time Series - Time series toolkit for Julia.
  • Sampling - Basic sampling algorithms for Julia.

Misc Stuff / Presentations

  • DSP - Digital Signal Processing (filtering, periodograms, spectrograms, window functions).
  • JuliaCon Presentations - Presentations for JuliaCon.
  • SignalProcessing - Signal Processing tools for Julia.
  • Images - An image library for Julia.

Lua

General-Purpose Machine Learning

  • Torch7
    • cephes - Cephes mathematical functions library, wrapped for Torch. Provides and wraps the 180+ special mathematical functions from the Cephes mathematical library, developed by Stephen L. Moshier. It is used, among many other places, at the heart of SciPy.
    • autograd - Autograd automatically differentiates native Torch code. Inspired by the original Python version.
    • graph - Graph package for Torch.
    • randomkit - Numpy's randomkit, wrapped for Torch.
    • signal - A signal processing toolbox for Torch-7. FFT, DCT, Hilbert, cepstrums, stft.
    • nn - Neural Network package for Torch.
    • torchnet - framework for torch which provides a set of abstractions aiming at encouraging code re-use as well as encouraging modular programming.
    • nngraph - This package provides graphical computation for nn library in Torch7.
    • nnx - A completely unstable and experimental package that extends Torch's builtin nn library.
    • rnn - A Recurrent Neural Network library that extends Torch's nn. RNNs, LSTMs, GRUs, BRNNs, BLSTMs, etc.
    • dpnn - Many useful features that aren't part of the main nn package.
    • dp - A deep learning library designed for streamlining research and development using the Torch7 distribution. It emphasizes flexibility through the elegant use of object-oriented design patterns.
    • optim - An optimization library for Torch. SGD, Adagrad, Conjugate-Gradient, LBFGS, RProp and more.
    • unsup - A package for unsupervised learning in Torch. Provides modules that are compatible with nn (LinearPsd, ConvPsd, AutoEncoder, ...), and self-contained algorithms (k-means, PCA).
    • manifold - A package to manipulate manifolds.
    • svm - Torch-SVM library.
    • lbfgs - FFI Wrapper for liblbfgs.
    • vowpalwabbit - An old vowpalwabbit interface to torch.
    • OpenGM - OpenGM is a C++ library for graphical modeling, and inference. The Lua bindings provide a simple way of describing graphs, from Lua, and then optimizing them with OpenGM.
    • sphagetti - Spaghetti (sparse linear) module for torch7 by @MichaelMathieu
    • LuaSHKit - A lua wrapper around the Locality sensitive hashing library SHKit
    • kernel smoothing - KNN, kernel-weighted average, local linear regression smoothers.
    • cutorch - Torch CUDA Implementation.
    • cunn - Torch CUDA Neural Network Implementation.
    • imgraph - An image/graph library for Torch. This package provides routines to construct graphs on images, segment them, build trees out of them, and convert them back to images.
    • videograph - A video/graph library for Torch. This package provides routines to construct graphs on videos, segment them, build trees out of them, and convert them back to videos.
    • saliency - code and tools around integral images. A library for finding interest points based on fast integral histograms.
    • stitch - allows us to use hugin to stitch images and apply same stitching to a video sequence.
    • sfm - A bundle adjustment/structure from motion package.
    • fex - A package for feature extraction in Torch. Provides SIFT and dSIFT modules.
    • OverFeat - A state-of-the-art generic dense feature extractor.
    • wav2letter - a simple and efficient end-to-end Automatic Speech Recognition (ASR) system from Facebook AI Research.
  • Numeric Lua
  • Lunatic Python
  • SciLua
  • Lua - Numerical Algorithms
  • Lunum

Demos and Scripts

  • Core torch7 demos repository.
    • linear-regression, logistic-regression
    • face detector (training and detection as separate demos)
    • mst-based-segmenter
    • train-a-digit-classifier
    • train-autoencoder
    • optical flow demo
    • train-on-housenumbers
    • train-on-cifar
    • tracking with deep nets
    • kinect demo
    • filter-bank visualization
    • saliency-networks
  • Training a Convnet for the Galaxy-Zoo Kaggle challenge(CUDA demo)
  • Music Tagging - Music Tagging scripts for torch7.
  • torch-datasets - Scripts to load several popular datasets including:
    • BSR 500
    • CIFAR-10
    • COIL
    • Street View House Numbers
    • MNIST
    • NORB
  • Atari2600 - Scripts to generate a dataset with static frames from the Arcade Learning Environment.

Matlab

Computer Vision

  • Contourlets - MATLAB source code that implements the contourlet transform and its utility functions.
  • Shearlets - MATLAB code for shearlet transform.
  • Curvelets - The Curvelet transform is a higher dimensional generalization of the Wavelet transform designed to represent images at different scales and different angles.
  • Bandlets - MATLAB code for bandlet transform.
  • mexopencv - Collection and a development kit of MATLAB mex functions for OpenCV library.

Natural Language Processing

  • NLP - An NLP library for Matlab.

General-Purpose Machine Learning

Data Analysis / Data Visualization

  • matlab_gbl - MatlabBGL is a Matlab package for working with graphs.
  • gamic - Efficient pure-Matlab implementations of graph algorithms to complement MatlabBGL's mex functions.

.NET

Computer Vision

  • OpenCVDotNet - A wrapper for the OpenCV project to be used with .NET applications.
  • Emgu CV - Cross platform wrapper of OpenCV which can be compiled in Mono to e run on Windows, Linus, Mac OS X, iOS, and Android.
  • AForge.NET - Open source C# framework for developers and researchers in the fields of Computer Vision and Artificial Intelligence. Development has now shifted to GitHub.
  • Accord.NET - Together with AForge.NET, this library can provide image processing and computer vision algorithms to Windows, Windows RT and Windows Phone. Some components are also available for Java and Android.

Natural Language Processing

  • Stanford.NLP for .NET - A full port of Stanford NLP packages to .NET and also available precompiled as a NuGet package.

General-Purpose Machine Learning

  • Accord-Framework -The Accord.NET Framework is a complete framework for building machine learning, computer vision, computer audition, signal processing and statistical applications.
  • Accord.MachineLearning - Support Vector Machines, Decision Trees, Naive Bayesian models, K-means, Gaussian Mixture models and general algorithms such as Ransac, Cross-validation and Grid-Search for machine-learning applications. This package is part of the Accord.NET Framework.
  • DiffSharp - An automatic differentiation (AD) library providing exact and efficient derivatives (gradients, Hessians, Jacobians, directional derivatives, and matrix-free Hessian- and Jacobian-vector products) for machine learning and optimization applications. Operations can be nested to any level, meaning that you can compute exact higher-order derivatives and differentiate functions that are internally making use of differentiation, for applications such as hyperparameter optimization.
  • Vulpes - Deep belief and deep learning implementation written in F# and leverages CUDA GPU execution with Alea.cuBase.
  • Encog - An advanced neural network and machine learning framework. Encog contains classes to create a wide variety of networks, as well as support classes to normalize and process data for these neural networks. Encog trains using multithreaded resilient propagation. Encog can also make use of a GPU to further speed processing time. A GUI based workbench is also provided to help model and train neural networks.
  • Neural Network Designer - DBMS management system and designer for neural networks. The designer application is developed using WPF, and is a user interface which allows you to design your neural network, query the network, create and configure chat bots that are capable of asking questions and learning from your feed back. The chat bots can even scrape the internet for information to return in their output as well as to use for learning.
  • Infer.NET - Infer.NET is a framework for running Bayesian inference in graphical models. One can use Infer.NET to solve many different kinds of machine learning problems, from standard problems like classification, recommendation or clustering through to customised solutions to domain-specific problems. Infer.NET has been used in a wide variety of domains including information retrieval, bioinformatics, epidemiology, vision, and many others.

Data Analysis / Data Visualization

  • numl - numl is a machine learning library intended to ease the use of using standard modeling techniques for both prediction and clustering.
  • Math.NET Numerics - Numerical foundation of the Math.NET project, aiming to provide methods and algorithms for numerical computations in science, engineering and every day use. Supports .Net 4.0, .Net 3.5 and Mono on Windows, Linux and Mac; Silverlight 5, WindowsPhone/SL 8, WindowsPhone 8.1 and Windows 8 with PCL Portable Profiles 47 and 344; Android/iOS with Xamarin.
  • Sho - Sho is an interactive environment for data analysis and scientific computing that lets you seamlessly connect scripts (in IronPython) with compiled code (in .NET) to enable fast and flexible prototyping. The environment includes powerful and efficient libraries for linear algebra as well as data visualization that can be used from any .NET language, as well as a feature-rich interactive shell for rapid development.

Objective C

General-Purpose Machine Learning

  • YCML - A Machine Learning framework for Objective-C and Swift (OS X / iOS).
  • MLPNeuralNet - Fast multilayer perceptron neural network library for iOS and Mac OS X. MLPNeuralNet predicts new examples by trained neural network. It is built on top of the Apple's Accelerate Framework, using vectorized operations and hardware acceleration if available.
  • MAChineLearning - An Objective-C multilayer perceptron library, with full support for training through backpropagation. Implemented using vDSP and vecLib, it's 20 times faster than its Java equivalent. Includes sample code for use from Swift.
  • BPN-NeuralNetwork - It implemented 3 layers neural network ( Input Layer, Hidden Layer and Output Layer ) and it named Back Propagation Neural Network (BPN). This network can be used in products recommendation, user behavior analysis, data mining and data analysis.
  • Multi-Perceptron-NeuralNetwork - it implemented multi-perceptrons neural network (ニューラルネットワーク) based on Back Propagation Neural Network (BPN) and designed unlimited-hidden-layers.
  • KRHebbian-Algorithm - It is a non-supervisor and self-learning algorithm (adjust the weights) in neural network of Machine Learning.
  • KRKmeans-Algorithm - It implemented K-Means the clustering and classification algorithm. It could be used in data mining and image compression.
  • KRFuzzyCMeans-Algorithm - It implemented Fuzzy C-Means (FCM) the fuzzy clustering / classification algorithm on Machine Learning. It could be used in data mining and image compression.

OCaml

General-Purpose Machine Learning

  • Oml - A general statistics and machine learning library.
  • GPR - Efficient Gaussian Process Regression in OCaml.
  • Libra-Tk - Algorithms for learning and inference with discrete probabilistic models.
  • TensorFlow - OCaml bindings for TensorFlow.

Perl

Data Analysis / Data Visualization

General-Purpose Machine Learning

Perl 6

Data Analysis / Data Visualization

General-Purpose Machine Learning

PHP

Natural Language Processing

  • jieba-php - Chinese Words Segmentation Utilities.

General-Purpose Machine Learning

  • PHP-ML - Machine Learning library for PHP. Algorithms, Cross Validation, Neural Network, Preprocessing, Feature Extraction and much more in one library.
  • PredictionBuilder - A library for machine learning that builds predictions using a linear regression.

Python

Computer Vision

  • Scikit-Image - A collection of algorithms for image processing in Python.
  • SimpleCV - An open source computer vision framework that gives access to several high-powered computer vision libraries, such as OpenCV. Written on Python and runs on Mac, Windows, and Ubuntu Linux.
  • Vigranumpy - Python bindings for the VIGRA C++ computer vision library.
  • OpenFace - Free and open source face recognition with deep neural networks.
  • PCV - Open source Python module for computer vision.
  • face_recognition - Face recognition library that recognize and manipulate faces from Python or from the command line.
  • dockerface - Easy to install and use deep learning Faster R-CNN face detection for images and video in a docker container.
  • Detectron - FAIR's software system that implements state-of-the-art object detection algorithms, including Mask R-CNN. It is written in Python and powered by the Caffe2 deep learning framework.

Natural Language Processing

  • NLTK - A leading platform for building Python programs to work with human language data.
  • Pattern - A web mining module for the Python programming language. It has tools for natural language processing, machine learning, among others.
  • Quepy - A python framework to transform natural language questions to queries in a database query language.
  • TextBlob - Providing a consistent API for diving into common natural language processing (NLP) tasks. Stands on the giant shoulders of NLTK and Pattern, and plays nicely with both.
  • YAlign - A sentence aligner, a friendly tool for extracting parallel sentences from comparable corpora.
  • jieba - Chinese Words Segmentation Utilities.
  • SnowNLP - A library for processing Chinese text.
  • spammy - A library for email Spam filtering built on top of nltk
  • loso - Another Chinese segmentation library.
  • genius - A Chinese segment base on Conditional Random Field.
  • KoNLPy - A Python package for Korean natural language processing.
  • nut - Natural language Understanding Toolkit.
  • Rosetta - Text processing tools and wrappers (e.g. Vowpal Wabbit)
  • BLLIP Parser - Python bindings for the BLLIP Natural Language Parser (also known as the Charniak-Johnson parser).
  • PyNLPl - Python Natural Language Processing Library. General purpose NLP library for Python. Also contains some specific modules for parsing common NLP formats, most notably for FoLiA, but also ARPA language models, Moses phrasetables, GIZA++ alignments.
  • python-ucto - Python binding to ucto (a unicode-aware rule-based tokenizer for various languages).
  • python-frog - Python binding to Frog, an NLP suite for Dutch. (pos tagging, lemmatisation, dependency parsing, NER)
  • python-zpar - Python bindings for ZPar, a statistical part-of-speech-tagger, constiuency parser, and dependency parser for English.
  • colibri-core - Python binding to C++ library for extracting and working with with basic linguistic constructions such as n-grams and skipgrams in a quick and memory-efficient way.
  • spaCy - Industrial strength NLP with Python and Cython.
  • PyStanfordDependencies - Python interface for converting Penn Treebank trees to Stanford Dependencies.
  • Distance - Levenshtein and Hamming distance computation.
  • Fuzzy Wuzzy - Fuzzy String Matching in Python.
  • jellyfish - a python library for doing approximate and phonetic matching of strings.
  • editdistance - fast implementation of edit distance.
  • textacy - higher-level NLP built on Spacy.
  • stanford-corenlp-python - Python wrapper for Stanford CoreNLP
  • CLTK - The Classical Language Toolkit.
  • rasa_nlu - turn natural language into structured data.
  • yase - Transcode sentence (or other sequence) to list of word vector .
  • Polyglot - Multilingual text (NLP) processing toolkit.
  • DrQA - Reading Wikipedia to answer open-domain questions.

General-Purpose Machine Learning

  • CNTK - Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit. Documentation can be found here.
  • auto_ml - Automated machine learning for production and analytics. Lets you focus on the fun parts of ML, while outputting production-ready code, and detailed analytics of your dataset and results. Includes support for NLP, XGBoost, CatBoost, LightGBM, and soon, deep learning.
  • machine learning - automated build consisting of a web-interface, and set of programmatic-interface API, for support vector machines. Corresponding dataset(s) are stored into a SQL database, then generated model(s) used for prediction(s), are stored into a NoSQL datastore.
  • XGBoost - Python bindings for eXtreme Gradient Boosting (Tree) Library.
  • Bayesian Methods for Hackers - Book/iPython notebooks on Probabilistic Programming in Python.
  • Featureforge A set of tools for creating and testing machine learning features, with a scikit-learn compatible API.
  • MLlib in Apache Spark - Distributed machine learning library in Spark
  • Hydrosphere Mist - a service for deployment Apache Spark MLLib machine learning models as realtime, batch or reactive web services.
  • scikit-learn - A Python module for machine learning built on top of SciPy.
  • metric-learn - A Python module for metric learning.
  • SimpleAI Python implementation of many of the artificial intelligence algorithms described on the book "Artificial Intelligence, a Modern Approach". It focuses on providing an easy to use, well documented and tested library.
  • astroML - Machine Learning and Data Mining for Astronomy.
  • graphlab-create - A library with various machine learning models (regression, clustering, recommender systems, graph analytics, etc.) implemented on top of a disk-backed DataFrame.
  • BigML - A library that contacts external servers.
  • pattern - Web mining module for Python.
  • NuPIC - Numenta Platform for Intelligent Computing.
  • Pylearn2 - A Machine Learning library based on Theano.
  • keras - Modular neural network library based on Theano.
  • Lasagne - Lightweight library to build and train neural networks in Theano.
  • hebel - GPU-Accelerated Deep Learning Library in Python.
  • Chainer - Flexible neural network framework.
  • prophet - Fast and automated time series forecasting framework by Facebook.
  • gensim - Topic Modelling for Humans.
  • topik - Topic modelling toolkit.
  • PyBrain - Another Python Machine Learning Library.
  • Brainstorm - Fast, flexible and fun neural networks. This is the successor of PyBrain.
  • Surprise - A scikit for building and analyzing recommender systems.
  • Crab - A flexible, fast recommender engine.
  • python-recsys - A Python library for implementing a Recommender System.
  • thinking bayes - Book on Bayesian Analysis.
  • Image-to-Image Translation with Conditional Adversarial Networks - Implementation of image to image (pix2pix) translation from the paper by isola et al.[DEEP LEARNING]
  • Restricted Boltzmann Machines -Restricted Boltzmann Machines in Python. [DEEP LEARNING]
  • Bolt - Bolt Online Learning Toolbox.
  • CoverTree - Python implementation of cover trees, near-drop-in replacement for scipy.spatial.kdtree
  • nilearn - Machine learning for NeuroImaging in Python.
  • neuropredict - Aimed at novice machine learners and non-expert programmers, this package offers easy (no coding needed) and comprehensive machine learning (evaluation and full report of predictive performance WITHOUT requiring you to code) in Python for NeuroImaging and any other type of features. This is aimed at absorbing the much of the ML workflow, unlike other packages like nilearn and pymvpa, which require you to learn their API and code to produce anything useful.
  • imbalanced-learn - Python module to perform under sampling and over sampling with various techniques.
  • Shogun - The Shogun Machine Learning Toolbox.
  • Pyevolve - Genetic algorithm framework.
  • Caffe - A deep learning framework developed with cleanliness, readability, and speed in mind.
  • breze - Theano based library for deep and recurrent neural networks.
  • pyhsmm - library for approximate unsupervised inference in Bayesian Hidden Markov Models (HMMs) and explicit-duration Hidden semi-Markov Models (HSMMs), focusing on the Bayesian Nonparametric extensions, the HDP-HMM and HDP-HSMM, mostly with weak-limit approximations.
  • mrjob - A library to let Python program run on Hadoop.
  • SKLL - A wrapper around scikit-learn that makes it simpler to conduct experiments.
  • neurolab - https://github.com/zueve/neurolab
  • Spearmint - Spearmint is a package to perform Bayesian optimization according to the algorithms outlined in the paper: Practical Bayesian Optimization of Machine Learning Algorithms. Jasper Snoek, Hugo Larochelle and Ryan P. Adams. Advances in Neural Information Processing Systems, 2012.
  • Pebl - Python Environment for Bayesian Learning.
  • Theano - Optimizing GPU-meta-programming code generating array oriented optimizing math compiler in Python.
  • TensorFlow - Open source software library for numerical computation using data flow graphs.
  • yahmm - Hidden Markov Models for Python, implemented in Cython for speed and efficiency.
  • python-timbl - A Python extension module wrapping the full TiMBL C++ programming interface. Timbl is an elaborate k-Nearest Neighbours machine learning toolkit.
  • deap - Evolutionary algorithm framework.
  • pydeep - Deep Learning In Python.
  • mlxtend - A library consisting of useful tools for data science and machine learning tasks.
  • neon - Nervana's high-performance Python-based Deep Learning framework [DEEP LEARNING].
  • Optunity - A library dedicated to automated hyperparameter optimization with a simple, lightweight API to facilitate drop-in replacement of grid search.
  • Neural Networks and Deep Learning - Code samples for my book "Neural Networks and Deep Learning" [DEEP LEARNING].
  • Annoy - Approximate nearest neighbours implementation.
  • skflow - Simplified interface for TensorFlow, mimicking Scikit Learn.
  • TPOT - Tool that automatically creates and optimizes machine learning pipelines using genetic programming. Consider it your personal data science assistant, automating a tedious part of machine learning.
  • pgmpy A python library for working with Probabilistic Graphical Models.
  • DIGITS - The Deep Learning GPU Training System (DIGITS) is a web application for training deep learning models.
  • Orange - Open source data visualization and data analysis for novices and experts.
  • MXNet - Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • milk - Machine learning toolkit focused on supervised classification.
  • TFLearn - Deep learning library featuring a higher-level API for TensorFlow.
  • REP - an IPython-based environment for conducting data-driven research in a consistent and reproducible way. REP is not trying to substitute scikit-learn, but extends it and provides better user experience.
  • rgf_python - Python bindings for Regularized Greedy Forest (Tree) Library.
  • skbayes - Python package for Bayesian Machine Learning with scikit-learn API.
  • fuku-ml - Simple machine learning library, including Perceptron, Regression, Support Vector Machine, Decision Tree and more, it's easy to use and easy to learn for beginners.
  • Xcessiv - A web-based application for quick, scalable, and automated hyperparameter tuning and stacked ensembling.
  • PyTorch - Tensors and Dynamic neural networks in Python with strong GPU acceleration
  • ML-From-Scratch - Implementations of Machine Learning models from scratch in Python with a focus on transparency. Aims to showcase the nuts and bolts of ML in an accessible way.
  • Edward - A library for probabilistic modeling, inference, and criticism. Built on top of TensorFlow.
  • xRBM - A library for Restricted Boltzmann Machine (RBM) and its conditional variants in Tensorflow.
  • CatBoost - General purpose gradient boosting on decision trees library with categorical features support out of the box. It is easy to install, well documented and supports CPU and GPU (even multi-GPU) computation.
  • stacked_generalization - Implementation of machine learning stacking technic as handy library in Python.
  • modAL - A modular active learning framework for Python, built on top of scikit-learn.
  • Cogitare: A Modern, Fast, and Modular Deep Learning and Machine Learning framework for Python.
  • Parris - Parris, the automated infrastructure setup tool for machine learning algorithms.

Data Analysis / Data Visualization

  • SciPy - A Python-based ecosystem of open-source software for mathematics, science, and engineering.
  • NumPy - A fundamental package for scientific computing with Python.
  • Numba - Python JIT (just in time) complier to LLVM aimed at scientific Python by the developers of Cython and NumPy.
  • NetworkX - A high-productivity software for complex networks.
  • igraph - binding to igraph library - General purpose graph library.
  • Pandas - A library providing high-performance, easy-to-use data structures and data analysis tools.
  • Open Mining - Business Intelligence (BI) in Python (Pandas web interface)
  • PyMC - Markov Chain Monte Carlo sampling toolkit.
  • zipline - A Pythonic algorithmic trading library.
  • PyDy - Short for Python Dynamics, used to assist with workflow in the modeling of dynamic motion based around NumPy, SciPy, IPython, and matplotlib.
  • SymPy - A Python library for symbolic mathematics.
  • statsmodels - Statistical modeling and econometrics in Python.
  • astropy - A community Python library for Astronomy.
  • matplotlib - A Python 2D plotting library.
  • bokeh - Interactive Web Plotting for Python.
  • plotly - Collaborative web plotting for Python and matplotlib.
  • vincent - A Python to Vega translator.
  • d3py - A plotting library for Python, based on D3.js.
  • PyDexter - Simple plotting for Python. Wrapper for D3xterjs; easily render charts in-browser.
  • ggplot - Same API as ggplot2 for R.
  • ggfortify - Unified interface to ggplot2 popular R packages.
  • Kartograph.py - Rendering beautiful SVG maps in Python.
  • pygal - A Python SVG Charts Creator.
  • PyQtGraph - A pure-python graphics and GUI library built on PyQt4 / PySide and NumPy.
  • pycascading
  • Petrel - Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python.
  • Blaze - NumPy and Pandas interface to Big Data.
  • emcee - The Python ensemble sampling toolkit for affine-invariant MCMC.
  • windML - A Python Framework for Wind Energy Analysis and Prediction.
  • vispy - GPU-based high-performance interactive OpenGL 2D/3D data visualization library.
  • cerebro2 A web-based visualization and debugging platform for NuPIC.
  • NuPIC Studio An all-in-one NuPIC Hierarchical Temporal Memory visualization and debugging super-tool!
  • SparklingPandas Pandas on PySpark (POPS).
  • Seaborn - A python visualization library based on matplotlib.
  • bqplot - An API for plotting in Jupyter (IPython).
  • pastalog - Simple, realtime visualization of neural network training performance.
  • caravel - A data exploration platform designed to be visual, intuitive, and interactive.
  • Dora - Tools for exploratory data analysis in Python.
  • Ruffus - Computation Pipeline library for python.
  • SOMPY - Self Organizing Map written in Python (Uses neural networks for data analysis).
  • somoclu Massively parallel self-organizing maps: accelerate training on multicore CPUs, GPUs, and clusters, has python API.
  • HDBScan - implementation of the hdbscan algorithm in Python - used for clustering
  • visualize_ML - A python package for data exploration and data analysis.
  • scikit-plot - A visualization library for quick and easy generation of common plots in data analysis and machine learning.
  • Bowtie - A dashboard library for interactive visualizations using flask socketio and react.
  • lime - Lime is about explaining what machine learning classifiers (or models) are doing. It is able to explain any black box classifier, with two or more classes.

Misc Scripts / iPython Notebooks / Codebases

Neural Networks

  • NeuralTalk - NeuralTalk is a Python+numpy project for learning Multimodal Recurrent Neural Networks that describe images with sentences.
  • Neuron - Neuron is simple class for time series predictions. It's utilize LNU (Linear Neural Unit), QNU (Quadratic Neural Unit), RBF (Radial Basis Function), MLP (Multi Layer Perceptron), MLP-ELM (Multi Layer Perceptron - Extreme Learning Machine) neural networks learned with Gradient descent or LeLevenberg–Marquardt algorithm.
  • Data Driven Code - Very simple implementation of neural networks for dummies in python without using any libraries, with detailed comments.

Kaggle Competition Source Code

Reinforcement Learning

  • DeepMind Lab - DeepMind Lab is a 3D learning environment based on id Software's Quake III Arena via ioquake3 and other open source software. Its primary purpose is to act as a testbed for research in artificial intelligence, especially deep reinforcement learning.
  • Gym - OpenAI Gym is a toolkit for developing and comparing reinforcement learning algorithms.
  • Serpent.AI - Serpent.AI is a game agent framework that allows you to turn any video game you own into a sandbox to develop AI and machine learning experiments. For both researchers and hobbyists.
  • Universe - Universe is a software platform for measuring and training an AI's general intelligence across the world's supply of games, websites and other applications.
  • ViZDoom - ViZDoom allows developing AI bots that play Doom using only the visual information (the screen buffer). It is primarily intended for research in machine visual learning, and deep reinforcement learning, in particular.

Ruby

Natural Language Processing

  • Awesome NLP with Ruby - Curated link list for practical natural language processing in Ruby.
  • Treat - Text REtrieval and Annotation Toolkit, definitely the most comprehensive toolkit I’ve encountered so far for Ruby.
  • Ruby Linguistics - Linguistics is a framework for building linguistic utilities for Ruby objects in any language. It includes a generic language-independent front end, a module for mapping language codes into language names, and a module which contains various English-language utilities.
  • Stemmer - Expose libstemmer_c to Ruby.
  • Ruby Wordnet - This library is a Ruby interface to WordNet.
  • Raspel - raspell is an interface binding for ruby.
  • UEA Stemmer - Ruby port of UEALite Stemmer - a conservative stemmer for search and indexing.
  • Twitter-text-rb - A library that does auto linking and extraction of usernames, lists and hashtags in tweets.

General-Purpose Machine Learning

Data Analysis / Data Visualization

  • rsruby - Ruby - R bridge.
  • data-visualization-ruby - Source code and supporting content for my Ruby Manor presentation on Data Visualisation with Ruby.
  • ruby-plot - gnuplot wrapper for Ruby, especially for plotting ROC curves into SVG files.
  • plot-rb - A plotting library in Ruby built on top of Vega and D3.
  • scruffy - A beautiful graphing toolkit for Ruby.
  • SciRuby
  • Glean - A data management tool for humans.
  • Bioruby
  • Arel

Misc

Rust

General-Purpose Machine Learning

  • deeplearn-rs - deeplearn-rs provides simple networks that use matrix multiplication, addition, and ReLU under the MIT license.
  • rustlearn - a machine learning framework featuring logistic regression, support vector machines, decision trees and random forests.
  • rusty-machine - a pure-rust machine learning library.
  • leaf - open source framework for machine intelligence, sharing concepts from TensorFlow and Caffe. Available under the MIT license. [Deprecated]
  • RustNN - RustNN is a feedforward neural network library.

R

General-Purpose Machine Learning

  • ahaz - ahaz: Regularization for semiparametric additive hazards regression.
  • arules - arules: Mining Association Rules and Frequent Itemsets
  • biglasso - biglasso: Extending Lasso Model Fitting to Big Data in R.
  • bigrf - bigrf: Big Random Forests: Classification and Regression Forests for Large Data Sets.
  • bigRR - bigRR: Generalized Ridge Regression (with special advantage for p >> n cases).
  • bmrm - bmrm: Bundle Methods for Regularized Risk Minimization Package.
  • Boruta - Boruta: A wrapper algorithm for all-relevant feature selection.
  • bst - bst: Gradient Boosting.
  • C50 - C50: C5.0 Decision Trees and Rule-Based Models.
  • caret - Classification and Regression Training: Unified interface to ~150 ML algorithms in R.
  • caretEnsemble - caretEnsemble: Framework for fitting multiple caret models as well as creating ensembles of such models.
  • CatBoost - General purpose gradient boosting on decision trees library with categorical features support out of the box for R.
  • Clever Algorithms For Machine Learning
  • CORElearn - CORElearn: Classification, regression, feature evaluation and ordinal evaluation.
  • CoxBoost - CoxBoost: Cox models by likelihood based boosting for a single survival endpoint or competing risks
  • Cubist - Cubist: Rule- and Instance-Based Regression Modeling.
  • e1071 - e1071: Misc Functions of the Department of Statistics (e1071), TU Wien
  • earth - earth: Multivariate Adaptive Regression Spline Models
  • elasticnet - elasticnet: Elastic-Net for Sparse Estimation and Sparse PCA.
  • ElemStatLearn - ElemStatLearn: Data sets, functions and examples from the book: "The Elements of Statistical Learning, Data Mining, Inference, and Prediction" by Trevor Hastie, Robert Tibshirani and Jerome Friedman Prediction" by Trevor Hastie, Robert Tibshirani and Jerome Friedman.
  • evtree - evtree: Evolutionary Learning of Globally Optimal Trees.
  • forecast - forecast: Timeseries forecasting using ARIMA, ETS, STLM, TBATS, and neural network models.
  • forecastHybrid - forecastHybrid: Automatic ensemble and cross validation of ARIMA, ETS, STLM, TBATS, and neural network models from the "forecast" package.
  • fpc - fpc: Flexible procedures for clustering.
  • frbs - frbs: Fuzzy Rule-based Systems for Classification and Regression Tasks.
  • GAMBoost - GAMBoost: Generalized linear and additive models by likelihood based boosting.
  • gamboostLSS - gamboostLSS: Boosting Methods for GAMLSS.
  • gbm - gbm: Generalized Boosted Regression Models.
  • glmnet - glmnet: Lasso and elastic-net regularized generalized linear models.
  • glmpath - glmpath: L1 Regularization Path for Generalized Linear Models and Cox Proportional Hazards Model.
  • GMMBoost - GMMBoost: Likelihood-based Boosting for Generalized mixed models.
  • grplasso - grplasso: Fitting user specified models with Group Lasso penalty.
  • grpreg - grpreg: Regularization paths for regression models with grouped covariates.
  • h2o - A framework for fast, parallel, and distributed machine learning algorithms at scale -- Deeplearning, Random forests, GBM, KMeans, PCA, GLM.
  • hda - hda: Heteroscedastic Discriminant Analysis.
  • Introduction to Statistical Learning
  • ipred - ipred: Improved Predictors.
  • kernlab - kernlab: Kernel-based Machine Learning Lab.
  • klaR - klaR: Classification and visualization.
  • lars - lars: Least Angle Regression, Lasso and Forward Stagewise.
  • lasso2 - lasso2: L1 constrained estimation aka ‘lasso’.
  • LiblineaR - LiblineaR: Linear Predictive Models Based On The Liblinear C/C++ Library.
  • LogicReg - LogicReg: Logic Regression.
  • Machine Learning For Hackers
  • maptree - maptree: Mapping, pruning, and graphing tree models.
  • mboost - mboost: Model-Based Boosting.
  • medley - medley: Blending regression models, using a greedy stepwise approach.
  • mlr - mlr: Machine Learning in R.
  • mvpart - mvpart: Multivariate partitioning.
  • ncvreg - ncvreg: Regularization paths for SCAD- and MCP-penalized regression models.
  • nnet - nnet: Feed-forward Neural Networks and Multinomial Log-Linear Models.
  • oblique.tree - oblique.tree: Oblique Trees for Classification Data.
  • pamr - pamr: Pam: prediction analysis for microarrays.
  • party - party: A Laboratory for Recursive Partytioning.
  • partykit - partykit: A Toolkit for Recursive Partytioning.
  • penalized - penalized: L1 (lasso and fused lasso) and L2 (ridge) penalized estimation in GLMs and in the Cox model.
  • penalizedLDA - penalizedLDA: Penalized classification using Fisher's linear discriminant.
  • penalizedSVM - penalizedSVM: Feature Selection SVM using penalty functions.
  • quantregForest - quantregForest: Quantile Regression Forests.
  • randomForest - randomForest: Breiman and Cutler's random forests for classification and regression.
  • randomForestSRC - randomForestSRC: Random Forests for Survival, Regression and Classification (RF-SRC).
  • rattle - rattle: Graphical user interface for data mining in R.
  • rda - rda: Shrunken Centroids Regularized Discriminant Analysis.
  • rdetools - rdetools: Relevant Dimension Estimation (RDE) in Feature Spaces.
  • REEMtree - REEMtree: Regression Trees with Random Effects for Longitudinal (Panel) Data.
  • relaxo - relaxo: Relaxed Lasso.
  • rgenoud - rgenoud: R version of GENetic Optimization Using Derivatives
  • rgp - rgp: R genetic programming framework.
  • Rmalschains - Rmalschains: Continuous Optimization using Memetic Algorithms with Local Search Chains (MA-LS-Chains) in R.
  • rminer - rminer: Simpler use of data mining methods (e.g. NN and SVM) in classification and regression.
  • ROCR - ROCR: Visualizing the performance of scoring classifiers.
  • RoughSets - RoughSets: Data Analysis Using Rough Set and Fuzzy Rough Set Theories.
  • rpart - rpart: Recursive Partitioning and Regression Trees.
  • RPMM - RPMM: Recursively Partitioned Mixture Model.
  • RSNNS - RSNNS: Neural Networks in R using the Stuttgart Neural Network Simulator (SNNS).
  • RWeka - RWeka: R/Weka interface.
  • RXshrink - RXshrink: Maximum Likelihood Shrinkage via Generalized Ridge or Least Angle Regression.
  • sda - sda: Shrinkage Discriminant Analysis and CAT Score Variable Selection.
  • SDDA - SDDA: Stepwise Diagonal Discriminant Analysis.
  • SuperLearner and subsemble - Multi-algorithm ensemble learning packages.
  • svmpath - svmpath: svmpath: the SVM Path algorithm.
  • tgp - tgp: Bayesian treed Gaussian process models.
  • tree - tree: Classification and regression trees.
  • varSelRF - varSelRF: Variable selection using random forests.
  • XGBoost.R - R binding for eXtreme Gradient Boosting (Tree) Library.
  • Optunity - A library dedicated to automated hyperparameter optimization with a simple, lightweight API to facilitate drop-in replacement of grid search. Optunity is written in Python but interfaces seamlessly to R.
  • igraph - binding to igraph library - General purpose graph library.
  • MXNet - Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more.
  • TDSP-Utilities - Two data science utilities in R from Microsoft: 1) Interactive Data Exploration, Analysis, and Reporting (IDEAR) ; 2) Automated Modeling and Reporting (AMR).

Data Analysis / Data Visualization

  • ggplot2 - A data visualization package based on the grammar of graphics.

SAS

General-Purpose Machine Learning

  • Visual Data Mining and Machine Learning - Interactive, automated, and programmatic modeling with the latest machine learning algorithms in and end-to-end analytics environment, from data prep to deployment. Free trial available.
  • Enterprise Miner - Data mining and machine learning that creates deployable models using a GUI or code.
  • Factory Miner - Automatically creates deployable machine learning models across numerous market or customer segments using a GUI.

Data Analysis / Data Visualization

  • SAS/STAT - For conducting advanced statistical analysis.
  • University Edition - FREE! Includes all SAS packages necessary for data analysis and visualization, and includes online SAS courses.

High Performance Machine Learning

Natural Language Processing

Demos and Scripts

  • ML_Tables - Concise cheat sheets containing machine learning best practices.
  • enlighten-apply - Example code and materials that illustrate applications of SAS machine learning techniques.
  • enlighten-integration - Example code and materials that illustrate techniques for integrating SAS with other analytics technologies in Java, PMML, Python and R.
  • enlighten-deep - Example code and materials that illustrate using neural networks with several hidden layers in SAS.
  • dm-flow - Library of SAS Enterprise Miner process flow diagrams to help you learn by example about specific data mining topics.

Scala

Natural Language Processing

  • ScalaNLP - ScalaNLP is a suite of machine learning and numerical computing libraries.
  • Breeze - Breeze is a numerical processing library for Scala.
  • Chalk - Chalk is a natural language processing library.
  • FACTORIE - FACTORIE is a toolkit for deployable probabilistic modeling, implemented as a software library in Scala. It provides its users with a succinct language for creating relational factor graphs, estimating parameters and performing inference.
  • Montague - Montague is a semantic parsing library for Scala with an easy-to-use DSL.

Data Analysis / Data Visualization

  • MLlib in Apache Spark - Distributed machine learning library in Spark
  • Hydrosphere Mist - a service for deployment Apache Spark MLLib machine learning models as realtime, batch or reactive web services.
  • Scalding - A Scala API for Cascading.
  • Summing Bird - Streaming MapReduce with Scalding and Storm.
  • Algebird - Abstract Algebra for Scala.
  • xerial - Data management utilities for Scala.
  • PredictionIO - PredictionIO, a machine learning server for software developers and data engineers.
  • BIDMat - CPU and GPU-accelerated matrix library intended to support large-scale exploratory data analysis.
  • Flink - Open source platform for distributed stream and batch data processing.
  • Spark Notebook - Interactive and Reactive Data Science using Scala and Spark.

General-Purpose Machine Learning

  • DeepLearning.scala - Creating statically typed dynamic neural networks from object-oriented & functional programming constructs.
  • Conjecture - Scalable Machine Learning in Scalding.
  • brushfire - Distributed decision tree ensemble learning in Scala.
  • ganitha - Scalding powered machine learning.
  • adam - A genomics processing engine and specialized file format built using Apache Avro, Apache Spark and Parquet. Apache 2 licensed.
  • bioscala - Bioinformatics for the Scala programming language
  • BIDMach - CPU and GPU-accelerated Machine Learning Library.
  • Figaro - a Scala library for constructing probabilistic models.
  • H2O Sparkling Water - H2O and Spark interoperability.
  • FlinkML in Apache Flink - Distributed machine learning library in Flink.
  • DynaML - Scala Library/REPL for Machine Learning Research.
  • Saul - Flexible Declarative Learning-Based Programming.
  • SwiftLearner - Simply written algorithms to help study ML or write your own implementations.
  • Smile - Statistical Machine Intelligence and Learning Engine.

Swift

General-Purpose Machine Learning

  • Bender - Fast Neural Networks framework built on top of Metal. Supports TensorFlow models.
  • Swift AI - Highly optimized artificial intelligence and machine learning library written in Swift.
  • BrainCore - The iOS and OS X neural network framework.
  • swix - A bare bones library that includes a general matrix language and wraps some OpenCV for iOS development.
  • DeepLearningKit an Open Source Deep Learning Framework for Apple’s iOS, OS X and tvOS. It currently allows using deep convolutional neural network models trained in Caffe on Apple operating systems.
  • AIToolbox - A toolbox framework of AI modules written in Swift: Graphs/Trees, Linear Regression, Support Vector Machines, Neural Networks, PCA, KMeans, Genetic Algorithms, MDP, Mixture of Gaussians.
  • MLKit - A simple Machine Learning Framework written in Swift. Currently features Simple Linear Regression, Polynomial Regression, and Ridge Regression.
  • Swift Brain - The first neural network / machine learning library written in Swift. This is a project for AI algorithms in Swift for iOS and OS X development. This project includes algorithms focused on Bayes theorem, neural networks, SVMs, Matrices, etc...
  • Perfect TensorFlow - Swift Language Bindings of TensorFlow. Using native TensorFlow models on both macOS / Linux.
  • Awesome CoreML - A curated list of pretrained CoreML models.
  • Awesome Core ML Models - A curated list of machine learning models in CoreML format.

TensorFlow

General-Purpose Machine Learning

Credits

  • Some of the python libraries were cut-and-pasted from vinta
  • The few go reference I found where pulled from this page
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - requests/requests: Python HTTP Requests for Humans™ ✨🍰✨
Skip to content
Python PowerShell Makefile
Latest commit 6e76aae Feb 22, 2018
kennethreitz nike
Signed-off-by: Kenneth Reitz <me@kennethreitz.org>

README.rst

Requests: HTTP for Humans

codecov.io

Requests is the only Non-GMO HTTP library for Python, safe for human consumption.

https://farm5.staticflickr.com/4317/35198386374_1939af3de6_k_d.jpg

Behold, the power of Requests:

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'disk_usage': 368627, u'private_gists': 484, ...}

See the similar code, sans Requests.

https://raw.githubusercontent.com/requests/requests/master/docs/_static/requests-logo-small.png

Requests allows you to send organic, grass-fed HTTP/1.1 requests, without the need for manual labor. There's no need to manually add query strings to your URLs, or to form-encode your POST data. Keep-alive and HTTP connection pooling are 100% automatic, thanks to urllib3.

Besides, all the cool kids are doing it. Requests is one of the most downloaded Python packages of all time, pulling in over 11,000,000 downloads every month. You don't want to be left out!

Feature Support

Requests is ready for today's web.

  • International Domains and URLs
  • Keep-Alive & Connection Pooling
  • Sessions with Cookie Persistence
  • Browser-style SSL Verification
  • Basic/Digest Authentication
  • Elegant Key/Value Cookies
  • Automatic Decompression
  • Automatic Content Decoding
  • Unicode Response Bodies
  • Multipart File Uploads
  • HTTP(S) Proxy Support
  • Connection Timeouts
  • Streaming Downloads
  • .netrc Support
  • Chunked Requests

Requests officially supports Python 2.6–2.7 & 3.4–3.6, and runs great on PyPy.

Installation

To install Requests, simply use pipenv (or pip, of course):

$ pipenv install requests
✨🍰✨

Satisfaction guaranteed.

Documentation

Fantastic documentation is available at http://docs.python-requests.org/, for a limited time only.

How to Contribute

  1. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. There is a Contributor Friendly tag for issues that should be ideal for people who are not very familiar with the codebase yet.
  2. Fork the repository on GitHub to start making your changes to the master branch (or branch off of it).
  3. Write a test which shows that the bug was fixed or that the feature works as expected.
  4. Send a pull request and bug the maintainer until it gets merged and published. :) Make sure to add yourself to AUTHORS.
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - yarnpkg/yarn: 📦🐈 Fast, reliable, and secure dependency management.
Skip to content
📦🐈 Fast, reliable, and secure dependency management.
JavaScript Shell Other
Switch branches/tags
Permalink
Failed to load latest commit information.
.circleci fix(install): use node-gyp from homebrew npm (#4994) Jan 15, 2018
.github Mention yarnpkg/rfcs in CONTRIBUTING, README and PULL_REQUEST_TEMPLAT… Mar 3, 2017
__tests__ break semver for engine check by allowing prereleases (#5352) Feb 18, 2018
bin fix(CLI): Use process exit instead of exitCode for node < 4 (#5291) Jan 30, 2018
end_to_end_tests Delete Docker container after test runs Nov 19, 2016
flow-typed/npm test(jest): Upgrade jest to latest available version (#5018) Dec 13, 2017
packages/lockfile Update: Update the lockfile parser README.md (#4232) Aug 23, 2017
resources Update: When upgrading Yarn on Windows, use the previous install dir (#… Jul 19, 2017
scripts ci(circle): Test all node versions on CircleCI (#4857) Nov 6, 2017
src Implements "yarn node" (#5388) Feb 21, 2018
.babelrc chore(build): Replace preset-node-5 and babel-preset-es2015-node4 w/ … Nov 2, 2017
.dockerignore Add Dockerfile for building Yarn (#2628) Feb 11, 2017
.editorconfig Allow token replacement of .npmrc configuration with env vars (#1207) Nov 14, 2016
.eslintignore chore(eslint): ignore packages dir (#4963) Nov 27, 2017
.eslintrc.json chore(lint): Rename file to .eslintrc.json (#4931) Nov 17, 2017
.flowconfig Chore: ignore flow warnings from graphql (#4473) Sep 15, 2017
.gitattributes Set tgz files as binary in git (#2273) Dec 16, 2016
.gitignore Tweaks to lockfile package (#4215) Aug 22, 2017
.npmignore Remove Roadrunner (#3079) Apr 8, 2017
CODE_OF_CONDUCT.md add my personal email to code of conduct Aug 24, 2016
CONTRIBUTING.md docs(contributing): Direct contribution guides to the website (#4872) Nov 7, 2017
Dockerfile.dev Updated node to 8.x in Dockerfile.dev (#4607) Oct 3, 2017
LICENSE LICENSE: Specify BSD 2-Clause (#3133) May 12, 2017
README.md Horizontal rule fixed in README (#5320) Feb 7, 2018
appveyor.yml ci(circle): Test all node versions on CircleCI (#4857) Nov 6, 2017
gulpfile.js fix(build): add sourceRoot to sourcemaps. Fixes #5319. (#5323) Feb 20, 2018
jenkins_jobs.groovy Publish npm release of Yarn directly from CircleCI (#3938) Jul 17, 2017
package.json chore(deps): update dependency execa to ^0.9.0 (#5181) Feb 10, 2018
renovate.json Configure Renovate (#5178) Jan 8, 2018
yarn.lock chore(deps): update dependency execa to ^0.9.0 (#5181) Feb 10, 2018

README.md

Yarn

Fast, reliable, and secure dependency management.

Circle Status Appveyor Status Discord Chat Commitizen friendly


Fast: Yarn caches every package it has downloaded, so it never needs to download the same package again. It also does almost everything concurrently to maximize resource utilization. This means even faster installs.

Reliable: Using a detailed but concise lockfile format and a deterministic algorithm for install operations, Yarn is able to guarantee that any installation that works on one system will work exactly the same on another system.

Secure: Yarn uses checksums to verify the integrity of every installed package before its code is executed.

Features

  • Offline Mode. If you've installed a package before, then you can install it again without an internet connection.
  • Deterministic. The same dependencies will be installed in the same exact way on any machine, regardless of installation order.
  • Network Performance. Yarn efficiently queues requests and avoids request waterfalls in order to maximize network utilization.
  • Network Resilience. A single request that fails will not cause the entire installation to fail. Requests are automatically retried upon failure.
  • Flat Mode. Yarn resolves mismatched versions of dependencies to a single version to avoid creating duplicates.
  • More emojis. 🐈

Installing Yarn

Read the Installation Guide on our website for detailed instructions on how to install Yarn.

Using Yarn

Read the Usage Guide on our website for detailed instructions on how to use Yarn.

Contributing to Yarn

Contributions are always welcome, no matter how large or small. Substantial feature requests should be proposed as an RFC. Before contributing, please read the code of conduct.

See Contributing.

Prior art

Yarn wouldn't exist if it wasn't for excellent prior art. Yarn has been inspired by the following projects:

Credits

Thanks to Sam Holmes for donating the npm package name!

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - ossu/computer-science: Path to a free self-taught education in Computer Science!
Skip to content
🎓 Path to a free self-taught education in Computer Science!
Switch branches/tags

README.md

Open Source Society University (OSSU)

Open Source Society University

Path to a free self-taught education in Computer Science!

Awesome Open Source Society University - Computer Science Contribute with OSSU on Patreon

Contents

Summary

The OSSU curriculum is a complete education in computer science using online materials. It's not merely for career training or professional development. It's for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines, and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, but with support from a worldwide community of fellow learners.

It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, as it is assumed most of the people following this curriculum are already educated outside the field of CS. The courses themselves are among the very best in the world, often coming from Harvard, Princeton, MIT, etc., but specifically chosen to meet the following criteria.

Courses must:

  • Be open for enrollment
  • Run regularly (ideally in self-paced format, otherwise running at least once a month or so)
  • Fulfill the academic requirements of OSSU
  • Fit neatly into the progression of the curriculum with respect to topics and difficulty level
  • Be of generally high quality in teaching materials and pedagogical principles

When no course meets the above criteria, the coursework is supplemented with a book. When there are courses or books that don't fit into the curriculum but are otherwise of high quality, they belong in extras/courses or extras/readings.

Organization. The curriculum is designed as follows:

  • Intro CS: for students to try out CS and see if it's right for them
  • Core CS: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take
  • Advanced CS: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student's interests
  • Final Project: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide
  • Pro CS: graduate-level specializations students can elect to take after completing the above curriculum if they want to maximize their chances of getting a good job

Duration. It is possible to finish Core CS within about 2 years if you plan carefully and devote roughly 18-22 hours/week to your studies. Courses in Core CS should be taken linearly if possible, but since a perfectly linear progression is rarely possible, each class's prerequisites is specified so that you can design a logical but non-linear progression based on the class schedules and your own life plans.

Cost. All or nearly all course material prior to Pro CS is available for free, however some courses may charge money for assignments/tests/projects to be graded. Note that Coursera offers financial aid. Decide how much or how little to spend based on your own time and budget; just remember that you can't purchase success!

Content policy. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. Do NOT disrespect the code of conduct that you signed in the beginning of each course!

How to contribute. Please see CONTRIBUTING.

Getting help. Please check our Frequently Asked Questions, and if you cannot find the answer, file an issue or talk to our friendly community!

Curriculum

Curriculum version: 8.0.0 (see CHANGELOG)


Prerequisites

  • Core CS assumes the student has already taken high school math and physics, including algebra, geometry, and pre-calculus. Some high school graduates will have already taken AP Calculus, but this is usually only about 3/4 of a college calculus class, so the calculus courses in the curriculum are still recommended.
  • Advanced CS assumes the student has already taken the entirety of Core CS and is knowledgeable enough now to decide which electives to take.
  • Note that Advanced systems assumes the student has taken a basic physics course (e.g. AP Physics in high school).

Introduction to Computer Science

These courses will introduce you to the world of computer science. Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C. (Why?)

Topics covered: imperative programming procedural programming C manual memory management basic data structures and algorithms Python SQL basic HTML, CSS, JavaScript and more

Courses Duration Effort Prerequisites
Introduction to Computer Science - CS50 (alt) 12 weeks 10-20 hours/week none
Introduction to Computer Science and Programming using Python 9 weeks 15 hours/week high school algebra

Core CS

All coursework under Core CS is required, unless otherwise indicated.

Core programming

Topics covered: functional programming design for testing program requirements common design patterns unit testing object-oriented design Java static typing dynamic typing ML-family languages (via Standard ML) Lisp-family languages (via Racket) Ruby and more

Courses Duration Effort Prerequisites
How to Code - Simple Data 7 weeks 8-10 hours/week none
How to Code - Complex Data 6 weeks 8-10 hours/week How to Code: Simple Data
Software Construction - Data Abstraction 6 weeks 8-10 hours/week How to Code - Complex Data
Software Construction - Object-Oriented Design 6 weeks 8-10 hours/week Software Construction - Data Abstraction
Programming Languages, Part A 4 weeks 8-16 hours/week recommended: Java, C
Programming Languages, Part B 3 weeks 8-16 hours/week Programming Languages, Part A
Programming Languages, Part C 3 weeks 8-16 hours/week Programming Languages, Part B

Readings

Core math

Topics covered: linear transformations matrices vectors mathematical proofs number theory differential calculus integral calculus sequences and series discrete mathematics basic statistics O-notation graph theory vector calculus discrete probability and more

Courses Duration Effort Prerequisites
Essence of Linear Algebra - - pre-calculus
Linear Algebra - Foundations to Frontiers (alt) 15 weeks 8 hours/week Essence of Linear Algebra
Calculus One1 (alt) 16 weeks 8-10 hours/week pre-calculus
Calculus Two: Sequences and Series 7 weeks 9-10 hours/week Calculus One
Mathematics for Computer Science 13 weeks 5 hours/week single variable calculus (Calculus Two)

1 Note: When you are enrolled, please see this list of errors and these recommendations for how to progress through the course.

Core systems

Topics covered: boolean algebra gate logic memory computer architecture assembly machine language virtual machines high-level languages compilers operating systems network protocols and more

Courses Duration Effort Prerequisites
Build a Modern Computer from First Principles: From Nand to Tetris (alt) 6 weeks 7-13 hours/week none
Build a Modern Computer from First Principles: Nand to Tetris Part II 6 weeks 12-18 hours/week one of these programming languages, From Nand to Tetris Part I
Introduction to Computer Networking 8 weeks 4–12 hours/week algebra, probability, basic CS
ops-class.org - Hack the Kernel 15 weeks 6 hours/week algorithms

Readings

Core theory

Topics covered: divide and conquer sorting and searching randomized algorithms graph search shortest paths data structures greedy algorithms minimum spanning trees dynamic programming NP-completeness and more

Courses Duration Effort Prerequisites
Algorithms: Design and Analysis, Part I 8 weeks 4-8 hours/week any programming language, Mathematics for Computer Science
Algorithms: Design and Analysis, Part II 8 weeks 4-8 hours/week Part I

Core applications

Topics covered: Agile methodology REST software specifications refactoring relational databases transaction processing data modeling neural networks supervised learning unsupervised learning OpenGL raytracing block ciphers authentication public key encryption and more

Courses Duration Effort Prerequisites
Databases 12 weeks 8-12 hours/week some programming, basic CS
Machine Learning 11 weeks 4-6 hours/week linear algebra
Computer Graphics 6 weeks 12 hours/week C++ or Java, linear algebra
Cryptography I 6 weeks 5-7 hours/week linear algebra, probability
Software Engineering: Introduction 6 weeks 8-10 hours/week Software Construction - Object-Oriented Design
Software Development Capstone Project 6-7 weeks 8-10 hours/week Software Engineering: Introduction

Advanced CS

After completing every required course in Core CS, students should choose a subset of courses from Advanced CS based on interest. Not every course from a subcategory needs to be taken. But students should take every course that is relevant to the field they intend to go into.

The Advanced CS study should then end with one of the Specializations under Advanced applications. A Specialization's Capstone, if taken, may act as the Final project, if permitted by the Honor Code of the course. If not, or if a student chooses not to take the Capstone, then a separate Final project will need to be done to complete this curriculum.

Advanced programming

Topics covered: debugging theory and practice goal-oriented programming GPU programming CUDA parallel computing object-oriented analysis and design UML large-scale software architecture and design and more

Courses Duration Effort Prerequisites
Compilers 9 weeks 6-8 hours/week none
Software Debugging 8 weeks 6 hours/week Python, object-oriented programming
Software Testing 4 weeks 6 hours/week Python, programming experience
LAFF: Programming for Correctness 7 weeks 6 hours/week linear algebra
Introduction to Parallel Programming 12 weeks - C, algorithms
Software Architecture & Design 8 weeks 6 hours/week software engineering in Java

Advanced math

Topics covered: parametric equations polar coordinate systems multivariable integrals multivariable differentials probability theory and more

Courses Duration Effort Prerequisites
Calculus: Parametric Equations and Polar Coordinates - - single-variable calculus (Calculus Two)
Multivariable Calculus 13 weeks 12 hours/week Parametric Equations and Polar Coordinates
Introduction to Probability - The Science of Uncertainty 18 weeks 12 hours/week Multivariable Calculus

Advanced systems

Topics covered: digital signaling combinational logic CMOS technologies sequential logic finite state machines processor instruction sets caches pipelining virtualization parallel processing virtual memory synchronization primitives system call interface and more

Courses Duration Effort Prerequisites
Reliable Distributed Systems, Part 1 5 weeks 5 hours/week Scala, intermediate CS
Reliable Distributed Systems, Part 2 5 weeks 5 hours/week Part 1
Electricity and Magnetism, Part 11 7 weeks 8-10 hours/week calculus, basic mechanics
Electricity and Magnetism, Part 2 7 weeks 8-10 hours/week Electricity and Magnetism, Part 1
Computation Structures 1: Digital Circuits 10 weeks 6 hours/week electricity, magnetism
Computation Structures 2: Computer Architecture 10 weeks 6 hours/week Computation Structures 1
Computation Structures 3: Computer Organization 10 weeks 6 hours/week Computation Structures 2

1 Note: These courses assume knowledge of basic physics. (Why?) If you are struggling, you can find a physics MOOC or utilize the materials from Khan Academy: Khan Academy - Physics

Advanced theory

Topics covered: formal languages Turing machines computability event-driven concurrency automata distributed shared memory consensus algorithms state machine replication computational geometry theory propositional logic relational logic Herbrand logic concept lattices game trees and more

Courses Duration Effort Prerequisites
Introduction to Logic 10 weeks 4-8 hours/week set theory
Automata Theory 8 weeks 10 hours/week discrete mathematics, logic, algorithms
Computational Geometry 16 weeks 8 hours/week algorithms, C++
Introduction to Formal Concept Analysis 6 weeks 4-6 hours/week logic, probability
Game Theory 8 weeks x hours/week mathematical thinking, probability, calculus

Advanced applications

These Coursera Specializations all end with a Capstone project. Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum. Note that doing a Specialization with the Capstone at the end always costs money. So if you don't wish to spend money or use the Capstone as your Final, it may be possible to take the courses in the Specialization for free by manually searching for them, but not all allow this.

Courses Duration Effort Prerequisites
Robotics (Specialization) 26 weeks 2-5 hours/week linear algebra, calculus, programming, probability
Data Mining (Specialization) 30 weeks 2-5 hours/week machine learning
Big Data (Specialization) 30 weeks 3-5 hours/week none
Internet of Things (Specialization) 30 weeks 1-5 hours/week strong programming
Cloud Computing (Specialization) 30 weeks 2-6 hours/week C++ programming
Full Stack Web Development (Specialization) 27 weeks 2-6 hours/week programming, databases
Data Science (Specialization) 43 weeks 1-6 hours/week none
Functional Programming in Scala (Specialization) 29 weeks 4-5 hours/weeks One year programming experience

Final project

OSS University is project-focused. You are encouraged to do the assignments and exams for each course, but what really matters is whether you can use your knowledge to solve a real world problem.

After you've gotten through all of Core CS and the parts of Advanced CS relevant to you, you should think about a problem that you can solve using the knowledge you've acquired. Not only does real project work look great on a resume, the project will validate and consolidate your knowledge. You can create something entirely new, or you can find an existing project that needs help via websites like CodeTriage or First Timers Only.

Another option is using the Capstone project from taking one of the Specializations in Advanced applications; whether or not this makes sense depends on the course, the project, and whether or not the course's Honor Code permits you to display your work publicly. In some cases, it may not be permitted; do not violate your course's Honor Code!

Put the OSSU-CS badge in the README of your repository! Open Source Society University - Computer Science

  • Markdown: [![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)
  • HTML: <a href="https://github.com/ossu/computer-science"><img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"></a>

Evaluation

Upon completing your final project, submit your project's information to PROJECTS via a pull request and use our community channels to announce it to your fellow students.

Your peers and mentors from OSSU will then informally evaluate your project. You will not be "graded" in the traditional sense — everyone has their own measurements for what they consider a success. The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist, and to get experience listening to feedback — both positive and negative — and taking it in stride.

The final project evaluation has a second purpose: to evaluate whether OSSU, through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education.

Cooperative work

You can create this project alone or with other students! We love cooperative work! Use our channels to communicate with other fellows to combine and create new projects!

Which programming languages should I use?

My friend, here is the best part of liberty! You can use any language that you want to complete the final project.

The important thing is to internalize the core concepts and to be able to use them with whatever tool (programming language) that you wish.

Pro CS

After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science, or quite close to one. You can stop in the Advanced CS section, but the next step to completing your studies is to develop skills and knowledge in a specific domain. Many of these courses are graduate-level.

Choose one or more of the following specializations:

These aren't the only specializations you can choose. Check the following websites for more options:

Where to go next?

  • Look for a job as a developer!
  • Check out the readings for classic books you can read that will sharpen your skills and expand your knowledge.
  • Join a local developer meetup (e.g. via meetup.com).
  • Pay attention to emerging technologies in the world of software development:
    • Explore the actor model through Elixir, a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
    • Explore borrowing and lifetimes through Rust, a systems language which achieves memory- and thread-safety without a garbage collector!
    • Explore dependent type systems through Idris, a new Haskell-inspired language with unprecedented support for type-driven development.

keep learning

Code of conduct

OSSU's code of conduct.

Community

PS: A forum is an ideal way to interact with other students as we do not lose important discussions, which usually occur in communication via chat apps. Please use our forum for important discussions.

How to show your progress

  1. Create an account in Trello.
  2. Copy this board to your personal account. See how to copy a board here.

Now that you have a copy of our official board, you just need to pass the cards to the Doing column or Done column as you progress in your study.

We also have labels to help you have more control through the process. The meaning of each of these labels is:

  • Main Curriculum: cards with that label represent courses that are listed in our curriculum.
  • Extra Resources: cards with that label represent courses that was added by the student.
  • Doing: cards with that label represent courses the student is current doing.
  • Done: cards with that label represent courses finished by the student. Those cards should also have the link for at least one project/article built with the knowledge acquired in such course.
  • Section: cards with that label represent the section that we have in our curriculum. Those cards with the Section label are only to help the organization of the Done column. You should put the Course's cards below its respective Section's card.

The intention of this board is to provide our students a way to track their progress, and also the ability to show their progress through a public page for friends, family, employers, etc. You can change the status of your board to be public or private.

Team

References

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - lodash/lodash: A modern JavaScript utility library delivering modularity, performance, & extras.
Skip to content
A modern JavaScript utility library delivering modularity, performance, & extras.
JavaScript
Permalink
Failed to load latest commit information.
.github Fix CoC link in .github/CONTRIBUTING.md (#3156) May 13, 2017
.internal Cleanup compareAscending and remove hardcoded locale. Jan 26, 2018
.editorconfig Define trim_trailing_whitespace rule for all files. Jan 27, 2016
.eslintrc.js Enable no-unexpected-multiline (#3103) Apr 12, 2017
.gitattributes Simplify .gitattributes. [ci skip] May 19, 2014
.gitignore Ignore log files that end with random numbers (#3445) Oct 23, 2017
CHANGELOG Simplify changelog reference. [ci skip] Sep 15, 2016
LICENSE Update license file with MIT title (#3498) Nov 18, 2017
README.md Add jsDelivr hits badge (#3418) Oct 9, 2017
add.js Remove semicolons. Feb 6, 2017
after.js Verbiage change (#3408) Oct 3, 2017
ary.js Remove guard params. Mar 5, 2017
assignWith.js Remove semicolons. Feb 6, 2017
at.js Remove semicolons. Feb 6, 2017
attempt.js Remove `apply`. Feb 25, 2017
before.js Remove coercion method use. Mar 14, 2017
bindKey.js Remove semicolons. Feb 6, 2017
camelCase.js Adjust spacing in template string expressions. Apr 9, 2017
capitalize.js Remove `toString` coercion method use. Mar 15, 2017
castArray.js Remove semicolons. Feb 6, 2017
ceil.js Remove semicolons. Feb 6, 2017
chunk.js Remove `baseSlice`. Apr 18, 2017
clamp.js Remove coercion method use. Mar 14, 2017
clone.js Remove semicolons. Feb 6, 2017
cloneDeep.js Remove semicolons. Feb 6, 2017
cloneDeepWith.js Add the accepted customizer arguments to cloneDeepWith docs. Jan 14, 2018
cloneWith.js Update argument count for `cloneWith` customizer. [closes #3582] Jan 9, 2018
compact.js Use more for-of Apr 5, 2017
cond.js Fixin new `map` imports. Apr 18, 2017
conforms.js Remove semicolons. Feb 6, 2017
conformsTo.js Remove semicolons. Feb 6, 2017
countBy.js Missing iteratee call in `countBy` (missed in 5baad4d). Feb 22, 2017
create.js Remove `baseCreate`. Feb 6, 2017
curry.js Remove guard params. Mar 5, 2017
curryRight.js Remove guard params. Mar 5, 2017
debounce.js rAF as default for debounce/throtte (#3560) (#3567) Jan 1, 2018
deburr.js Adjust spacing in template string expressions. Apr 9, 2017
defaultTo.js Remove semicolons. Feb 6, 2017
defaults.js Remove `baseKeys` and `baseKeysIn`. Apr 16, 2017
defaultsDeep.js Remove `apply`. Feb 25, 2017
defer.js Remove semicolons. Feb 6, 2017
delay.js Remove coercion method use. Mar 14, 2017
difference.js Remove semicolons. Feb 6, 2017
differenceBy.js Remove semicolons. Feb 6, 2017
differenceWith.js Remove semicolons. Feb 6, 2017
divide.js Remove semicolons. Feb 6, 2017
drop.js Remove `baseSlice`. Apr 18, 2017
dropRight.js Remove semicolons from `dropRight`. Oct 16, 2017
dropRightWhile.js Use consistent nullish check for `array`. Mar 1, 2017
dropWhile.js Use consistent nullish check for `array`. Mar 1, 2017
each.js Remove semicolons. Feb 6, 2017
eachRight.js Remove semicolons. Feb 6, 2017
endsWith.js Fixin some leftovers bb7c959. Mar 15, 2017
eq.js Remove semicolons. Feb 6, 2017
eqDeep.js Remove semicolons. Feb 6, 2017
escape.js Remove `toString` coercion method use. Mar 15, 2017
escapeRegExp.js Revert "Fix typo in `escapeRegExp` (#3448)" Nov 8, 2017
every.js Fix jsdoc for `every` and `some`. Apr 16, 2017
everyValue.js Fix object coercion. Apr 16, 2017
filter.js Split `filter` out. Apr 16, 2017
filterObject.js Fix object coercion. Apr 16, 2017
find.js Fix typo in `find`. Apr 16, 2017
findKey.js Fix typo in findKey. Aug 7, 2017
findLast.js Remove semicolons. Feb 6, 2017
findLastIndex.js Remove coercion method use. Mar 14, 2017
findLastKey.js Remove semicolons. Feb 6, 2017
first.js Remove semicolons. Feb 6, 2017
flatMap.js Remove semicolons. Feb 6, 2017
flatMapDeep.js Remove semicolons. Feb 6, 2017
flatMapDepth.js Remove coercion method use. Mar 14, 2017
flatten.js Remove semicolons. Feb 6, 2017
flattenDeep.js Remove semicolons. Feb 6, 2017
flattenDepth.js Remove coercion method use. Mar 14, 2017
flip.js Simplify `flip`. Mar 24, 2017
floor.js Remove semicolons. Feb 6, 2017
flow.js Use “composes” to describe flow/flowRight. [closes #2979] Feb 7, 2017
flowRight.js Use “composes” to describe flow/flowRight. [closes #2979] Feb 7, 2017
forEach.js Remove semicolons. Feb 6, 2017
forEachRight.js Remove semicolons. Feb 6, 2017
forOwn.js Fix object coercion. Apr 16, 2017
forOwnRight.js Fixin assignment to constant. Mar 6, 2017
fromPairs.js Use more for-of Apr 3, 2017
functions.js Remove constant function from examples (#3086) Mar 30, 2017
get.js Remove semicolons. Feb 6, 2017
groupBy.js Missing iteratee call in `groupBy` and `keyBy`. Feb 21, 2017
gt.js Remove coercion method use. Mar 14, 2017
gte.js Remove coercion method use. Mar 14, 2017
has.js Simplify `has` and `hasIn`. Feb 27, 2017
hasIn.js Simplify `has` and `hasIn`. Feb 27, 2017
hasPath.js Fixin scope range for var declarations in `hasPath` and `hasPathIn`. Apr 4, 2017
hasPathIn.js Fixin scope range for var declarations in `hasPath` and `hasPathIn`. Apr 4, 2017
head.js Adjust styling of array checks in `head`, `uniq`, `uniqBy` and `uniqW… Mar 16, 2017
inRange.js Fix typo in `inRange` (#3478) Nov 6, 2017
indexOf.js Remove coercion method use. Mar 14, 2017
initial.js Remove `baseSlice`. Apr 18, 2017
intersection.js Fixin new `map` imports. Apr 18, 2017
intersectionBy.js Fixin new `map` imports. Apr 18, 2017
intersectionWith.js Fixin new `map` imports. Apr 18, 2017
invert.js Fixin loop args order regression from 3c2795b in `invert`. Jul 14, 2017
invertBy.js Fixin loop args order regression from 3c2795b in `invertBy`. Jul 14, 2017
invoke.js Remove `apply`. Feb 25, 2017
invokeMap.js Use the `new` operator with the `Array` constructor. Mar 8, 2017
isArguments.js use isObjectLike module instead of (typeof value == 'object' && value… Feb 19, 2018
isArrayBuffer.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
isArrayLike.js Remove `isFunction` use. Feb 25, 2017
isArrayLikeObject.js Remove semicolons. Feb 6, 2017
isBoolean.js Remove semicolons. Feb 6, 2017
isBuffer.js Update object checks. Apr 24, 2017
isDate.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
isElement.js Remove semicolons. Feb 6, 2017
isEmpty.js Add string example to isEmpty docs (#3647) Feb 17, 2018
isEqualWith.js Remove semicolons. Feb 6, 2017
isError.js Remove semicolons. Feb 6, 2017
isFunction.js Remove semicolons. Feb 6, 2017
isLength.js Remove semicolons. Feb 6, 2017
isMap.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
isMatch.js Remove semicolons. Feb 6, 2017
isMatchWith.js Remove semicolons. Feb 6, 2017
isNative.js Remove `toSource`. Apr 9, 2017
isNil.js Remove semicolons. Feb 6, 2017
isNull.js Remove semicolons. Feb 6, 2017
isNumber.js Remove semicolons. Feb 6, 2017
isObject.js Remove semicolons. Feb 6, 2017
isObjectLike.js Update object checks. Apr 24, 2017
isPlainObject.js Faster/simpler isPlainObject check (#3483) Nov 8, 2017
isRegExp.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
isSet.js use isObjectLike module instead of (typeof value == 'object' && value… Feb 19, 2018
isString.js Simplify isType methods. Feb 11, 2017
isSymbol.js Simplify isType methods. Feb 11, 2017
isTypedArray.js use isObjectLike module instead of (typeof value == 'object' && value… Feb 19, 2018
isUndefined.js Remove semicolons. Feb 6, 2017
isWeakMap.js use isObjectLike module instead of (typeof value == 'object' && value… Feb 19, 2018
isWeakSet.js use isObjectLike module instead of (typeof value == 'object' && value… Feb 19, 2018
kebabCase.js Adjust spacing in template string expressions. Apr 9, 2017
keyBy.js Missing iteratee call in `groupBy` and `keyBy`. Feb 21, 2017
keys.js Remove `baseKeys` and `baseKeysIn`. Apr 16, 2017
last.js Remove semicolons. Feb 6, 2017
lastIndexOf.js Remove coercion method use. Mar 14, 2017
lowerCase.js Tiny performance improvement by not compiling regular expression each… Nov 7, 2017
lowerFirst.js Remove semicolons. Feb 6, 2017
lt.js Remove coercion method use. Mar 14, 2017
lte.js Remove coercion method use. Mar 14, 2017
map.js Split `map` out. Apr 16, 2017
mapKey.js Fix object coercion. Apr 16, 2017
mapObject.js Fix typos. Apr 16, 2017
mapValue.js Fix object coercion. Apr 16, 2017
matches.js Remove semicolons. Feb 6, 2017
matchesProperty.js Remove semicolons. Feb 6, 2017
maxBy.js Use more for-of Apr 3, 2017
mean.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
meanBy.js Remove semicolons. Feb 6, 2017
memoize.js Remove semicolons. Feb 6, 2017
merge.js Remove semicolons. Feb 6, 2017
mergeWith.js Remove semicolons. Feb 6, 2017
method.js Remove constant function from examples (#3086) Mar 30, 2017
methodOf.js Remove constant function from examples (#3086) Mar 30, 2017
minBy.js Use more for-of Apr 3, 2017
multiply.js Remove semicolons. Feb 6, 2017
negate.js Remove semicolons. Feb 6, 2017
nth.js Remove coercion method use. Mar 14, 2017
nthArg.js Remove `baseNth`. Mar 13, 2017
once.js Remove semicolons. Feb 6, 2017
orderBy.js Remove guard params. Mar 5, 2017
over.js Fixin new `map` imports. Apr 18, 2017
overArgs.js Remove `apply`. Feb 25, 2017
overEvery.js Fixin `some` and `every` imports. Apr 18, 2017
overSome.js Fixin `some` and `every` imports. Apr 18, 2017
package.json feat(sideEffects): Set sideEffects false for opt. (#3533) Dec 5, 2017
pad.js Update _.pad* examples to show pad length < string. (#3088) Mar 30, 2017
padEnd.js Update _.pad* examples to show pad length < string. (#3088) Mar 30, 2017
padStart.js Update _.pad* examples to show pad length < string. (#3088) Mar 30, 2017
parseInt.js Remove `map` examples from `parseInt` and `trim` (#3487) Nov 10, 2017
partition.js Fixin missing accumulator return in reduce and predicate call in `par… Feb 18, 2017
pick.js Remove semicolons. Feb 6, 2017
pickBy.js Fixin new `map` imports. Apr 18, 2017
property.js Remove semicolons. Feb 6, 2017
propertyOf.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
pull.js Remove semicolons. Feb 6, 2017
pullAll.js Use consistent nullish check for `array`. Mar 1, 2017
pullAllBy.js Use consistent nullish check for `array`. Mar 1, 2017
pullAllWith.js Use consistent nullish check for `array`. Mar 1, 2017
pullAt.js Fixin new `map` imports. Apr 18, 2017
random.js Adjust spacing in template string expressions. Apr 9, 2017
range.js Remove semicolons. Feb 6, 2017
rangeRight.js Remove semicolons. Feb 6, 2017
reduce.js Remove semicolons. Feb 6, 2017
reduceRight.js Remove semicolons. Feb 6, 2017
reject.js Fixin `filter` imports. Apr 20, 2017
remove.js Use more destructuring. Mar 13, 2017
repeat.js Math them all. Apr 4, 2017
replace.js Adjust spacing in template string expressions. Apr 9, 2017
result.js Remove constant function from examples (#3086) Mar 30, 2017
round.js Remove semicolons. Feb 6, 2017
sample.js Simplify `shuffle` and `sample`. Feb 7, 2017
sampleSize.js Changed to function as documented. (#3596) Jan 20, 2018
set.js Remove semicolons. Feb 6, 2017
setWith.js Remove semicolons. Feb 6, 2017
shuffle.js Fixin import path to copyArray. (#3000) Feb 13, 2017
size.js Remove `baseKeys` and `baseKeysIn`. Apr 16, 2017
slice.js Update documentation in slice.js (#3631) Feb 6, 2018
snakeCase.js Adjust spacing in template string expressions. Apr 9, 2017
some.js Fix jsdoc for `every` and `some`. Apr 16, 2017
someValue.js Fix object coercion. Apr 16, 2017
sortedIndex.js Remove semicolons. Feb 6, 2017
sortedIndexBy.js Remove semicolons. Feb 6, 2017
sortedIndexOf.js Remove semicolons. Feb 6, 2017
sortedLastIndex.js Remove semicolons. Feb 6, 2017
sortedLastIndexBy.js Remove semicolons. Feb 6, 2017
sortedLastIndexOf.js Remove semicolons. Feb 6, 2017
sortedUniq.js Remove trailing space in `sortedUniq`. Oct 16, 2017
sortedUniqBy.js Use consistent nullish check for `array`. Mar 1, 2017
split.js Remove `toString` coercion method use. Mar 15, 2017
startCase.js Adjust spacing in template string expressions. Apr 9, 2017
startsWith.js Adjust spacing in template string expressions. Apr 9, 2017
subtract.js Remove semicolons. Feb 6, 2017
sum.js Consistent use (always) of parentheses in arrow functions. Mar 7, 2017
sumBy.js Use consistent nullish check for `array`. Mar 1, 2017
tail.js Simplify `tail`. Mar 24, 2017
take.js Remove `baseSlice`. Apr 18, 2017
takeRight.js Remove `baseSlice`. Apr 18, 2017
takeRightWhile.js Use consistent nullish check for `array`. Mar 1, 2017
takeWhile.js Use consistent nullish check for `array`. Mar 1, 2017
template.js Adjust spacing in template string expressions. Apr 9, 2017
templateSettings.js Remove semicolons. Feb 6, 2017
throttle.js rAF as default for debounce/throtte (#3560) (#3567) Jan 1, 2018
times.js Remove constant function from examples (#3086) Mar 30, 2017
toArray.js Remove semicolons. Feb 6, 2017
toFinite.js Remove semicolons. Feb 6, 2017
toInteger.js Fix #3466 (#3467) Nov 2, 2017
toLength.js Remove `baseClamp`. Mar 12, 2017
toNumber.js Adjust spacing in template string expressions. Apr 9, 2017
toPath.js Fixin new `map` imports. Apr 18, 2017
toPlainObject.js Eslint cleanup (imports left), except template. Feb 17, 2017
toSafeInteger.js Remove `baseClamp`. Mar 12, 2017
toString.js Fixin new `map` imports. Apr 18, 2017
transform.js Remove `isFunction` use. Feb 25, 2017
trim.js Remove `map` examples from `parseInt` and `trim` (#3487) Nov 10, 2017
trimEnd.js Remove `toString` coercion method use. Mar 15, 2017
trimStart.js Remove `toString` coercion method use. Mar 15, 2017
truncate.js Adjust spacing in template string expressions. Apr 9, 2017
unescape.js Remove `toString` coercion method use. Mar 15, 2017
union.js Remove semicolons. Feb 6, 2017
unionBy.js Remove semicolons. Feb 6, 2017
unionWith.js Remove semicolons. Feb 6, 2017
uniq.js Adjust styling of array checks in `head`, `uniq`, `uniqBy` and `uniqW… Mar 16, 2017
uniqBy.js Adjust styling of array checks in `head`, `uniq`, `uniqBy` and `uniqW… Mar 16, 2017
uniqWith.js Adjust styling of array checks in `head`, `uniq`, `uniqBy` and `uniqW… Mar 16, 2017
uniqueId.js add uniq Map for generated ID (#3644) Feb 13, 2018
unset.js Remove semicolons. Feb 6, 2017
unzip.js Fixin `filter` imports. Apr 20, 2017
unzipWith.js Fixin new `map` imports. Apr 18, 2017
update.js _.update() docs grammar fix (#3264) Jul 17, 2017
updateWith.js Remove constant function from examples (#3086) Mar 30, 2017
upperCase.js Adjust spacing in template string expressions. Apr 9, 2017
upperFirst.js Remove semicolons. Feb 6, 2017
values.js Remove semicolons. Feb 6, 2017
without.js Remove semicolons. Feb 6, 2017
words.js Simplify `words`. Mar 27, 2017
xor.js Fixin `filter` imports. Apr 20, 2017
xorBy.js Remove duplicated "by which" words from the doc (#3534) Dec 6, 2017
xorWith.js Fixin `filter` imports. Apr 20, 2017
zip.js Remove semicolons. Feb 6, 2017
zipObject.js Remove semicolons. Feb 6, 2017
zipObjectDeep.js Remove semicolons. Feb 6, 2017
zipWith.js Remove semicolons. Feb 6, 2017

README.md

lodash v4.17.4

Site | Docs | FP Guide | Contributing | Wiki | Code of Conduct | Twitter | Chat

The Lodash library exported as a UMD module.

Generated using lodash-cli:

$ npm run build
$ lodash -o ./dist/lodash.js
$ lodash core -o ./dist/lodash.core.js

Download

Lodash is released under the MIT license & supports modern environments.
Review the build differences & pick one that’s right for you.

Installation

In a browser:

<script src="lodash.js"></script>

Using npm:

$ npm i -g npm
$ npm i --save lodash

In Node.js:

// Load the full build.
var _ = require('lodash');
// Load the core build.
var _ = require('lodash/core');
// Load the FP build for immutable auto-curried iteratee-first data-last methods.
var fp = require('lodash/fp');

// Load method categories.
var array = require('lodash/array');
var object = require('lodash/fp/object');

// Cherry-pick methods for smaller browserify/rollup/webpack bundles.
var at = require('lodash/at');
var curryN = require('lodash/fp/curryN');

Note:
Install n_ for Lodash use in the Node.js < 6 REPL.

Why Lodash?

Lodash makes JavaScript easier by taking the hassle out of working with arrays,
numbers, objects, strings, etc. Lodash’s modular methods are great for:

  • Iterating arrays, objects, & strings
  • Manipulating & testing values
  • Creating composite functions

Module Formats

Lodash is available in a variety of builds & module formats.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - necolas/normalize.css: A modern alternative to CSS resets
Skip to content
CSS
Latest commit 7369f56 Feb 11, 2018

README.md

normalize.css

Normalize Logo

A modern alternative to CSS resets

npm license changelog gitter

NPM

npm install --save normalize.css

CDN

See https://yarnpkg.com/en/package/normalize.css

Download

See https://necolas.github.io/normalize.css/latest/normalize.css

What does it do?

  • Preserves useful defaults, unlike many CSS resets.
  • Normalizes styles for a wide range of elements.
  • Corrects bugs and common browser inconsistencies.
  • Improves usability with subtle modifications.
  • Explains what code does using detailed comments.

Browser support

  • Chrome
  • Edge
  • Firefox ESR+
  • Internet Explorer 10+
  • Safari 8+
  • Opera

Extended details and known issues

Additional detail and explanation of the esoteric parts of normalize.css.

pre, code, kbd, samp

The font-family: monospace, monospace hack fixes the inheritance and scaling of font-size for preformatted text. The duplication of monospace is intentional. Source.

sub, sup

Normally, using sub or sup affects the line-box height of text in all browsers. Source.

select

By default, Chrome on OS X and Safari on OS X allow very limited styling of select, unless a border property is set. The default font weight on optgroup elements cannot safely be changed in Chrome on OSX and Safari on OS X.

[type="checkbox"]

It is recommended that you do not style checkbox and radio inputs as Firefox's implementation does not respect box-sizing, padding, or width.

[type="number"]

Certain font size values applied to number inputs cause the cursor style of the decrement button to change from default to text.

[type="search"]

The search input is not fully stylable by default. In Chrome and Safari on OSX/iOS you can't control font, padding, border, or background. In Chrome and Safari on Windows you can't control border properly. It will apply border-width but will only show a border color (which cannot be controlled) for the outer 1px of that border. Applying -webkit-appearance: textfield addresses these issues without removing the benefits of search inputs (e.g. showing past searches).

Contributing

Please read the contribution guidelines in order to make the contribution process easy and effective for everyone involved.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - iluwatar/java-design-patterns: Design patterns implemented in Java
Skip to content
Java HTML Other
Latest commit d78434f Feb 17, 2018
iluwatar Merge pull request #644 from spanhal1/master
added tutorial links to bridge, decorator, abstract-factory, strategy…
Permalink
Failed to load latest commit information.
abstract-document rename png file and changes for README.md Jan 8, 2018
abstract-factory Merge branch 'master' into master Jan 28, 2018
adapter Set version for next development iteration Jan 1, 2018
aggregator-microservices Set version for next development iteration Jan 1, 2018
api-gateway Set version for next development iteration Jan 1, 2018
async-method-invocation Set version for next development iteration Jan 1, 2018
balking Set version for next development iteration Jan 1, 2018
bridge Merge branch 'master' into master Jan 28, 2018
builder Set version for next development iteration Jan 1, 2018
business-delegate Set version for next development iteration Jan 1, 2018
caching Set version for next development iteration Jan 1, 2018
callback Set version for next development iteration Jan 1, 2018
chain Set version for next development iteration Jan 1, 2018
command Set version for next development iteration Jan 1, 2018
composite Set version for next development iteration Jan 1, 2018
converter Set version for next development iteration Jan 1, 2018
cqrs Remove redundant explicit super() constructor calls #694 Jan 15, 2018
dao Cleanup commented code Jan 2, 2018
data-bus Set version for next development iteration Jan 1, 2018
data-mapper Removing all redundant super constructor calls Jan 11, 2018
data-transfer-object Set version for next development iteration Jan 1, 2018
decorator Merge branch 'master' into master Jan 28, 2018
delegation Set version for next development iteration Jan 1, 2018
dependency-injection Set version for next development iteration Jan 1, 2018
double-checked-locking Set version for next development iteration Jan 1, 2018
double-dispatch Set version for next development iteration Jan 1, 2018
eip-aggregator Set version for next development iteration Jan 1, 2018
eip-splitter Set version for next development iteration Jan 1, 2018
eip-wire-tap Set version for next development iteration Jan 1, 2018
event-aggregator Remove redundant explicit super() constructor calls #694 Jan 15, 2018
event-asynchronous Set version for next development iteration Jan 1, 2018
event-driven-architecture Set version for next development iteration Jan 1, 2018
event-queue fix error comment with isServiceRunnign Jan 27, 2018
event-sourcing Set version for next development iteration Jan 1, 2018
execute-around Set version for next development iteration Jan 1, 2018
extension-objects Set version for next development iteration Jan 1, 2018
facade Set version for next development iteration Jan 1, 2018
factory-kit Set version for next development iteration Jan 1, 2018
factory-method Set version for next development iteration Jan 1, 2018
feature-toggle Set version for next development iteration Jan 1, 2018
fluentinterface Set version for next development iteration Jan 1, 2018
flux Set version for next development iteration Jan 1, 2018
flyweight Set version for next development iteration Jan 1, 2018
front-controller Set version for next development iteration Jan 1, 2018
guarded-suspension Set version for next development iteration Jan 1, 2018
half-sync-half-async Set version for next development iteration Jan 1, 2018
hexagonal Set version for next development iteration Jan 1, 2018
intercepting-filter Set version for next development iteration Jan 1, 2018
interpreter Set version for next development iteration Jan 1, 2018
iterator Set version for next development iteration Jan 1, 2018
layers Set version for next development iteration Jan 1, 2018
lazy-loading Set version for next development iteration Jan 1, 2018
marker Set version for next development iteration Jan 1, 2018
mediator Set version for next development iteration Jan 1, 2018
memento Set version for next development iteration Jan 1, 2018
message-channel Set version for next development iteration Jan 1, 2018
model-view-controller Set version for next development iteration Jan 1, 2018
model-view-presenter Set version for next development iteration Jan 1, 2018
module Set version for next development iteration Jan 1, 2018
monad Set version for next development iteration Jan 1, 2018
monostate Set version for next development iteration Jan 1, 2018
multiton Set version for next development iteration Jan 1, 2018
mute-idiom Set version for next development iteration Jan 1, 2018
mutex Set version for next development iteration Jan 1, 2018
naked-objects Set version for next development iteration Jan 1, 2018
null-object Set version for next development iteration Jan 1, 2018
object-mother Fix typo Feb 1, 2018
object-pool Set version for next development iteration Jan 1, 2018
observer Set version for next development iteration Jan 1, 2018
page-object Set version for next development iteration Jan 1, 2018
partial-response Set version for next development iteration Jan 1, 2018
poison-pill Set version for next development iteration Jan 1, 2018
private-class-data Set version for next development iteration Jan 1, 2018
producer-consumer Set version for next development iteration Jan 1, 2018
promise Set version for next development iteration Jan 1, 2018
property Set version for next development iteration Jan 1, 2018
prototype issue 508 - using copy constructor to implement prototype. Jan 27, 2018
proxy Set version for next development iteration Jan 1, 2018
publish-subscribe Set version for next development iteration Jan 1, 2018
queue-load-leveling Removing all redundant super constructor calls Jan 11, 2018
reactor Set version for next development iteration Jan 1, 2018
reader-writer-lock Set version for next development iteration Jan 1, 2018
repository Set version for next development iteration Jan 1, 2018
resource-acquisition-is-initialization Set version for next development iteration Jan 1, 2018
retry Set version for next development iteration Jan 1, 2018
semaphore Set version for next development iteration Jan 1, 2018
servant Set version for next development iteration Jan 1, 2018
service-layer Set version for next development iteration Jan 1, 2018
service-locator Set version for next development iteration Jan 1, 2018
singleton Merge pull request #609 from igorcadelima/master Feb 17, 2018
specification Set version for next development iteration Jan 1, 2018
state Set version for next development iteration Jan 1, 2018
step-builder Set version for next development iteration Jan 1, 2018
strategy Merge branch 'master' into master Jan 28, 2018
template-method Merge branch 'master' into master Jan 28, 2018
thread-pool Set version for next development iteration Jan 1, 2018
throttling Set version for next development iteration Jan 1, 2018
tls Set version for next development iteration Jan 1, 2018
tolerant-reader Set version for next development iteration Jan 1, 2018
twin Set version for next development iteration Jan 1, 2018
unit-of-work Set version for next development iteration Jan 1, 2018
value-object Removing all redundant super constructor calls Jan 11, 2018
visitor Set version for next development iteration Jan 1, 2018
.gitignore Update .gitignore Sep 3, 2017
.travis.yml #674 update SonarQube analysis URL Jan 7, 2018
CODE_COVERAGE.md Added capability for test coverage report generation and steps to do so. Nov 22, 2015
CONTRIBUTING.MD Update CONTRIBUTING.MD Dec 28, 2015
LICENSE.md Update license year from 2014 to range '2014-2016' Feb 3, 2016
PULL_REQUEST_TEMPLATE.md Update PULL_REQUEST_TEMPLATE.md Dec 9, 2017
README.md #674 update SonarQube badge URL and link Jan 7, 2018
checkstyle-suppressions.xml Update license headers Nov 27, 2016
checkstyle.xml Migrate to JUnit5 Dec 31, 2017
exclude-pmd.properties Update license headers Nov 27, 2016
faq.md Added FAQ on Memento pattern Aug 20, 2016
pom.xml Set version for next development iteration Jan 1, 2018
update-ghpages.sh Update license headers Nov 27, 2016

README.md

Design patterns implemented in Java

Build status License MIT Join the chat at https://gitter.im/iluwatar/java-design-patterns Quality Gate CII Best Practices

Introduction

Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.

Design patterns can speed up the development process by providing tested, proven development paradigms.

Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.

Getting started

Before you dive into the material, you should be familiar with various Programming/Software Design Principles.

All designs should be as simple as possible. You should start with KISS, YAGNI, and Do The Simplest Thing That Could Possibly Work principles. Complexity and patterns should only be introduced when they are needed for practical extensibility.

Once you are familiar with these concepts you can start drilling down into patterns by any of the following approaches

  • Using difficulty tags, Difficulty-Beginner, Difficulty-Intermediate & Difficulty-Expert.
  • Using pattern categories, Creational, Behavioral and others.
  • Search for a specific pattern. Can't find one? Please report a new pattern here.

How to contribute

If you are willing to contribute to the project you will find the relevant information in our developer wiki. We will help you and answer your questions in the Gitter chatroom.

License

This project is licensed under the terms of the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - google/material-design-lite: Material Design Components in HTML/CSS/JS
Skip to content
HTML CSS JavaScript
Switch branches/tags
Latest commit 60f441a Jun 27, 2017

README.md

Material Design Lite

GitHub version npm version Bower version Gitter version Dependency Status

An implementation of Material Design components in vanilla CSS, JS, and HTML.

Material Design Lite (MDL) lets you add a Material Design look and feel to your static content websites. It doesn't rely on any JavaScript frameworks or libraries. Optimized for cross-device use, gracefully degrades in older browsers, and offers an experience that is accessible from the get-go.

Limited support

Material Design Lite is now in limited support, with development having moved to the Material Components for the web repository.

No further development is taking place in MDL by the core team, but we are happy to review PRs, fix critical bugs and push out new releases. No breaking changes will be accepted.

Use MDL on your site?

This document is targeted at developers that will contribute to or compile MDL. If you are looking to use MDL on your website or web app please head to getmdl.io.

Browser Support

IE9 IE10 IE11 Chrome Opera Firefox Safari Chrome (Android) Mobile Safari
B A A A A A A A A

A-grade browsers are fully supported. B-grade browsers will gracefully degrade to our CSS-only experience.

Download / Clone

Clone the repo using Git:

git clone https://github.com/google/material-design-lite.git

Alternatively you can download this repository.

Windows users, if you have trouble compiling due to line endings then make sure you configure git to checkout the repository with lf (unix) line endings. This can be achieved by setting core.eol.

git config core.eol lf
git config core.autocrlf input
git rm --cached -r .
git reset --hard

Remember, the master branch is considered unstable. Do not use this in production. Use a tagged state of the repository, npm, or bower for stability!

Feature requests

MDL is currently in limited support mode, with no further development taking place by the core team. We are happy to accept and review pull requests for new functionality, however, as long as there are no breaking changes.

Want to contribute?

If you found a bug, have any questions or want to contribute. Follow our guidelines, and help improve the Material Design Lite. For more information visit our wiki.

Please use the default branch, mdl-1.x.

Take note that Material Components for Web, which is MDL v2, is under early Alpha stages (which means everything is a moving target, and we can change anything at any moment). Use with caution.

However, we would absolutely love to have people testing MCW and provide feedback about their experiences using it, especially integrating with other frameworks and libraries.

License

© Google, 2015. Licensed under an Apache-2 license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - typicode/json-server: Get a full fake REST API with zero coding in less than 30 seconds (seriously)
Skip to content
Get a full fake REST API with zero coding in less than 30 seconds (seriously)
JavaScript HTML CSS
Latest commit 517f5a8 Dec 4, 2017
typicode committed Dec 4, 2017 Update README.md

README.md

JSON Server

Get a full fake REST API with zero coding in less than 30 seconds (seriously)

Created with <3 for front-end developers who need a quick back-end for prototyping and mocking.

See also:

Table of contents

Example

Create a db.json file

{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" }
  ],
  "comments": [
    { "id": 1, "body": "some comment", "postId": 1 }
  ],
  "profile": { "name": "typicode" }
}

Start JSON Server

$ json-server --watch db.json

Now if you go to http://localhost:3000/posts/1, you'll get

{ "id": 1, "title": "json-server", "author": "typicode" }

Also when doing requests, it's good to know that:

  • If you make POST, PUT, PATCH or DELETE requests, changes will be automatically and safely saved to db.json using lowdb.
  • Your request body JSON should be object enclosed, just like the GET output. (for example {"name": "Foobar"})
  • Id values are not mutable. Any id value in the body of your PUT or PATCH request wil be ignored. Only a value set in a POST request wil be respected, but only if not already taken.
  • A POST, PUT or PATCH request should include a Content-Type: application/json header to use the JSON in the request body. Otherwise it will result in a 200 OK but without changes being made to the data.

Install

$ npm install -g json-server

Routes

Based on the previous db.json file, here are all the default routes. You can also add other routes using --routes.

Plural routes

GET    /posts
GET    /posts/1
POST   /posts
PUT    /posts/1
PATCH  /posts/1
DELETE /posts/1

Singular routes

GET    /profile
POST   /profile
PUT    /profile
PATCH  /profile

Filter

Use . to access deep properties

GET /posts?title=json-server&author=typicode
GET /posts?id=1&id=2
GET /comments?author.name=typicode

Paginate

Use _page and optionally _limit to paginate returned data.

In the Link header you'll get first, prev, next and last links.

GET /posts?_page=7
GET /posts?_page=7&_limit=20

10 items are returned by default

Sort

Add _sort and _order (ascending order by default)

GET /posts?_sort=views&_order=asc
GET /posts/1/comments?_sort=votes&_order=asc

For multiple fields, use the following format:

GET /posts?_sort=user,views&_order=desc,asc

Slice

Add _start and _end or _limit (an X-Total-Count header is included in the response)

GET /posts?_start=20&_end=30
GET /posts/1/comments?_start=20&_end=30
GET /posts/1/comments?_start=20&_limit=10

Works exactly as Array.slice (i.e. _start is inclusive and _end exclusive)

Operators

Add _gte or _lte for getting a range

GET /posts?views_gte=10&views_lte=20

Add _ne to exclude a value

GET /posts?id_ne=1

Add _like to filter (RegExp supported)

GET /posts?title_like=server

Full-text search

Add q

GET /posts?q=internet

Relationships

To include children resources, add _embed

GET /posts?_embed=comments
GET /posts/1?_embed=comments

To include parent resource, add _expand

GET /comments?_expand=post
GET /comments/1?_expand=post

To get or create nested resources (by default one level, add custom routes for more)

GET  /posts/1/comments
POST /posts/1/comments

Database

GET /db

Homepage

Returns default index file or serves ./public directory

GET /

Extras

Static file server

You can use JSON Server to serve your HTML, JS and CSS, simply create a ./public directory or use --static to set a different static files directory.

mkdir public
echo 'hello world' > public/index.html
json-server db.json
json-server db.json --static ./some-other-dir

Alternative port

You can start JSON Server on other ports with the --port flag:

$ json-server --watch db.json --port 3004

Access from anywhere

You can access your fake API from anywhere using CORS and JSONP.

Remote schema

You can load remote schemas.

$ json-server http://example.com/file.json
$ json-server http://jsonplaceholder.typicode.com/db

Generate random data

Using JS instead of a JSON file, you can create data programmatically.

// index.js
module.exports = () => {
  const data = { users: [] }
  // Create 1000 users
  for (let i = 0; i < 1000; i++) {
    data.users.push({ id: i, name: `user${i}` })
  }
  return data
}
$ json-server index.js

Tip use modules like Faker, Casual, Chance or JSON Schema Faker.

HTTPS

There's many way to set up SSL in development. One simple way though is to use hotel.

Add custom routes

Create a routes.json file. Pay attention to start every route with /.

{
  "/api/*": "/$1",
  "/:resource/:id/show": "/:resource/:id",
  "/posts/:category": "/posts?category=:category",
  "/articles\\?id=:id": "/posts/:id"
}

Start JSON Server with --routes option.

json-server db.json --routes routes.json

Now you can access resources using additional routes.

/api/posts # → /posts
/api/posts/1  # → /posts/1
/posts/1/show # → /posts/1
/posts/javascript # → /posts?category=javascript
/articles?id=1 # → /posts/1

Add middlewares

You can add your middlewares from the CLI using --middlewares option:

// hello.js
module.exports = (req, res, next) => {
  res.header('X-Hello', 'World')
  next()
}
json-server db.json --middlewares ./hello.js
json-server db.json --middlewares ./first.js ./second.js

CLI usage

json-server [options] <source>

Options:
  --config, -c       Path to config file           [default: "json-server.json"]
  --port, -p         Set port                                    [default: 3000]
  --host, -H         Set host                               [default: "0.0.0.0"]
  --watch, -w        Watch file(s)                                     [boolean]
  --routes, -r       Path to routes file
  --middlewares, -m  Paths to middleware files                           [array]
  --static, -s       Set static files directory
  --read-only, --ro  Allow only GET requests                           [boolean]
  --no-cors, --nc    Disable Cross-Origin Resource Sharing             [boolean]
  --no-gzip, --ng    Disable GZIP Content-Encoding                     [boolean]
  --snapshots, -S    Set snapshots directory                      [default: "."]
  --delay, -d        Add delay to responses (ms)
  --id, -i           Set database id property (e.g. _id)         [default: "id"]
  --foreignKeySuffix, --fks  Set foreign key suffix, (e.g. _id as in post_id)
                                                                 [default: "Id"]
  --quiet, -q        Suppress log messages from output                 [boolean]
  --help, -h         Show help                                         [boolean]
  --version, -v      Show version number                               [boolean]

Examples:
  json-server db.json
  json-server file.js
  json-server http://example.com/db.json

https://github.com/typicode/json-server

You can also set options in a json-server.json configuration file.

{
  "port": 3000
}

Module

If you need to add authentication, validation, or any behavior, you can use the project as a module in combination with other Express middlewares.

Simple example

$ npm install json-server --save-dev
// server.js
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()

server.use(middlewares)
server.use(router)
server.listen(3000, () => {
  console.log('JSON Server is running')
})
$ node server.js

The path you provide to the jsonServer.router function is relative to the directory from where you launch your node process. If you run the above code from another directory, it’s better to use an absolute path:

const path = require('path')
const router = jsonServer.router(path.join(__dirname, 'db.json'))

For an in-memory database, simply pass an object to jsonServer.router().

Please note also that jsonServer.router() can be used in existing Express projects.

Custom routes example

Let's say you want a route that echoes query parameters and another one that set a timestamp on every resource created.

const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()

// Set default middlewares (logger, static, cors and no-cache)
server.use(middlewares)

// Add custom routes before JSON Server router
server.get('/echo', (req, res) => {
  res.jsonp(req.query)
})

// To handle POST, PUT and PATCH you need to use a body-parser
// You can use the one used by JSON Server
server.use(jsonServer.bodyParser)
server.use((req, res, next) => {
  if (req.method === 'POST') {
    req.body.createdAt = Date.now()
  }
  // Continue to JSON Server router
  next()
})

// Use default router
server.use(router)
server.listen(3000, () => {
  console.log('JSON Server is running')
})

Access control example

const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()

server.use(middlewares)
server.use((req, res, next) => {
 if (isAuthorized(req)) { // add your authorization logic here
   next() // continue to JSON Server router
 } else {
   res.sendStatus(401)
 }
})
server.use(router)
server.listen(3000, () => {
  console.log('JSON Server is running')
})

Custom output example

To modify responses, overwrite router.render method:

// In this example, returned resources will be wrapped in a body property
router.render = (req, res) => {
  res.jsonp({
    body: res.locals.data
  })
}

You can set your own status code for the response:

// In this example we simulate a server side error response
router.render = (req, res) => {
  res.status(500).jsonp({
    error: "error message here"
  })
}

Rewriter example

To add rewrite rules, use jsonServer.rewriter():

// Add this before server.use(router)
server.use(jsonServer.rewriter({
  '/api/*': '/$1',
  '/blog/:resource/:id/show': '/:resource/:id'
}))

Mounting JSON Server on another endpoint example

Alternatively, you can also mount the router on /api.

server.use('/api', router)

API

jsonServer.create()

Returns an Express server.

jsonServer.defaults([options])

Returns middlewares used by JSON Server.

  • options
    • static path to static files
    • logger enable logger middleware (default: true)
    • bodyParser enable body-parser middleware (default: true)
    • noCors disable CORS (default: false)
    • readOnly accept only GET requests (default: false)

jsonServer.router([path|object])

Returns JSON Server router.

Deployment

You can deploy JSON Server. For example, JSONPlaceholder is an online fake API powered by JSON Server and running on Heroku.

Links

Video

Articles

Third-party tools

License

MIT - Typicode - Patreon

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - vuejs/awesome-vue: 🎉 A curated list of awesome things related to Vue.js
Skip to content
🎉 A curated list of awesome things related to Vue.js

README.md


logo of vue-awesome repository

Awesome Vue.js Awesome

A curated list of awesome things related to Vue.js

Resources

Official Resources

External Resources

Job Portal

Community

Conferences

Podcasts

Youtube Channels

Official Examples

Tutorials

Examples

Books

Projects Using Vue.js

Open Source

  • PageKit - Modular and lightweight CMS built with Symfony components and Vue.js.
  • npmcharts.com - Compare npm packages and spot download trends.
  • Koel - A personal music streaming server that works.
  • RSS Reader - Simple RSS Reader made using atom electron and vue.js.
  • Gokotta - A simple music player built by electron and vue.
  • CoPilot - An admin portal based on AdminLTE with vue.js integration.
  • Retrospectify - A simple tool for doing collaborative retrospectives in agile teams.
  • jade-press - Cms based on mongodb, nodejs, koa, vue and more.
  • astralapp - Organize Your GitHub Stars With Ease.
  • EME - An Elegant Markdown Editor.
  • Github-explorer - A spa which can help you check your github in a better way.
  • Hotel - Start your dev servers from your browser and get local domains in seconds.
  • Surfbird - A Twitter client written with modern web technologies.
  • Approach0 - A math-aware search engine.
  • Flox - Self Hosted Movie, Series and Anime Watch List.
  • JavaScript Guessing Game - A game for identifying JavaScript tools and libraries.
  • vue-ghpages-blog - A blog based on GitHub pages by Vue.js 2 + Webpack 2.
  • Vuedo - Blog platform, built with Laravel and Vue.js.
  • vue-music163 - A Vue.js project for music.
  • Tomato5 - Real-time collaboration tool, it combines Pomodoro Technique with a team status share board.
  • Web Learn - A service which provides simple access to thousands of video tutorials on web developing and programming.
  • ExcelJSON - A tool to convert CSV, TSV to/from JSON.
  • Materialize-blog - A material blog built with Laravel5.3 and Vue2.x.
  • VueCompomnentGenerator - Generate vue single file component on browser.
  • SDR News - News for web designers and developers aggregated from multiple sources (Reddit, Hacker News and Prominent Blogs).
  • PJ Blog - Open source blog built with Laravel and Vue.js.
  • Lulumi-browser - Lulumi-browser is a light weight browser coded with Vue.js 2 and Electron.
  • vue-wordpress-pwa
  • OpenAPI 3 viewer - Browse and test a REST API described with the OpenAPI 3.0 Specification
  • Stacer - Linux System Optimizer and Monitoring
  • Distrochooser.de - An orientation guide for Linux beginners
  • Buka - EBook Management
  • Docute - A framework for writing documentation without build process
  • pm86 - Production process manager for Node.js apps Websites
  • vms - A Vue.js 2.0 Management System
  • nativescript-vue - A Vue.js implementation of the NativeScript renderer.
  • piper - A drag-and-drop mobile website builder base on Vue.
  • mmf-blog-vue2 - A blog based on Vue2(Vue-router, Vuex) and Webpack2.
  • Media Manager - Web File Manager.
  • dyu/bookmarks - A self-contained, self-hosted bookmarking app powered by leveldb, built with Vue2.1.x.
  • JSON Schema Editor - An intuitive editor for JSON schema. Develop with Vue.js 2 and Firebase.
  • npm-stats - npm package download statistics dashboard
  • vue2-admin-lte - a project that converts AdminLTE to work with Vuejs (v2.x).
  • Dockeron - A project built on Electron + Vue.js for Docker on desktop.
  • Flamme - An open source Tinder desktop client built with electron and Vue.js for educational purposes
  • Goldfish - A HashiCorp Vault UI built with VueJS, Golang, and Bulma CSS
  • Adminify - An Admin dashboard based on Vuetify, check the Online Demo
  • promptie - A framework written in Vue.js for creating command-line like interfaces in web browsers.
  • Hare - 🐇 Application boilerplate based on Vue.js 2.x, Koa 2.x, Element-UI and Nuxt.js
  • Paper-Dashboard -Creative Tim Paper Dashboard made for Vue
  • AdminLTE-VueJS2 - An open source project that implements VueJS (v2.x) on AdminLTE.
  • Material Dashboard - Creative Tim Material Dashboard made for Vue
  • Explore-Github - VueJS 2 Github Explorer Using API v3
  • CoreUI - Open Source Admin Template powered by Vue.js
  • ChuckNorris - Chuck Norris Jokes Generator built with VueJS + api.chucknorris.io
  • LeafPlayer - A simple and fast, privately hosted music streaming server.
  • JSON Editor - A schema-aware JSON editor. Develop with Vue2.
  • Voten - A Reddit-like platform built with Vue2 and Laravel.
  • News Weaver - A web based RSS Reader/Aggregator made using VueJS and VuetifyJS
  • Wake Up Billie Joe! - A web site countdown to October, based on Green Day's song Wake me up when September Ends. Created using Vue and Firebase.
  • Astrum - A lightweight pattern library designed to be included with any web project.
  • vue2-pwa-vision - A Face Detection Google Cloud Vision with Vue2 + Vuetify + Progressive Web App
  • vue2-pwa-rekognition - A Face Detection Amazon Rekognition with Vue2 + Vuetify + Progressive Web App
  • AmmoBin.ca - meta search site for online ammo prices across Canada
  • SPA-asp.net-api-vuejs- - A Vue.js single page application for basic task Management & messaging using ASP .NET Webapi 2 and SQL server
  • Book-Trading-Club - Trade or loan books with other book readers in your area. Built using nodejs and vuejs2
  • vuejs-extension-pack vscode - An extension packf or vscode with popular VS Code extensions for Vue.js development.
  • Wiki.js - A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown
  • vue-pwa-speech - A Speech to text With Google Cloud Speech on Vue2 + Vuetify + Progressive Web App
  • vue-speech-streaming - A Performing Streaming Speech Recognition results in real time Speech To Text with Google Cloud Speech + socket.io on Progressive Web App
  • My Animation List - A tool to easy get css animation code
  • vue-input-streaming - A TextInput Streaming RealTime And Two Way Data Binding Broadcasting with Pusher
  • TidyTab - A Chrome extension for tidying up those tabs.
  • peregrine-cms - A Vue.js and Apache Sling based head-optional CMS
  • concept-to-clinic - Lung cancer prediction project with Vue.js interface
  • grid-awesome - Generate boilerplate css for grid layouts using the css display: grid; property.
  • Light Bootstrap Dashboard - Creative Tim Light Bootstrap Dashboard made for Vue
  • Hubaga - A free and lightweight WordPress eCommerce plugin for developers and other digital shops.
  • vue-webpack-buefy - Vue.js starter with full-featured Webpack and Buefy
  • Coypu - Text-editor-like weekly planner
  • core-server - Highly scallable VueJs framework with an integrated API system, and multiple advanced features.
  • discord-logo - A Vue.js animated discord logo generator based on SVGs. (Github Page)
  • node-vue-template - A starter template for building complete application using Node.js (API) and Vue.js (SPA) with some included packages and configurations to help start the development quickly.
  • vue-storefront - Vue.js Storefront - PWA for eCommerce. 100% offline, platform agnostic, headless, Magento2 supported.
  • fd-vue - Vue.js client for an IoT framework
  • wildfire - A drop-in replacement for other comment plug-ins.
  • Uber Run - Simple automation desktop app to download and organize your tax invoices from Uber.
  • vue-chrome-extension-boilerplate - Boilerplate for Chrome extension using Vue.js and Webpack
  • TimeMark - A Time manager which will can record your time and some more function will be developed.
  • Laravel Enso - SPA Admin Panel built with Bulma, VueJS and Laravel, packing lots of features out of the box.
  • Code Notes - A simple code snippet manager for developers built with Electron & Vue.js.
  • Pomotroid - Simple, visually-pleasing and customizable Pomodoro timer.
  • XMR Miner - Cryptocurrency (XMR) mining app, built with Vue.js and visualized with D3
  • XMR Paper - Monero wallet generator, built with Vue.js
  • JoyProxy - Chrome extension for handling proxy settings
  • activity-automation - Manage daily activities and get reports on timely basis.
  • jsettlers-web Popular German board game to build hexes, settlements, cities, roads with earned resources
  • Tamiat CMS - Tamiat is a front-end focused CMS, uses Vue.JS as the frontend and integrates with Firebase for the backend functionality.

Commercial Products

  • Wijmo - A collection of UI controls with VueJS support.
  • Collate Notes
  • Formester - Form, email marketing automation made easy
  • ChatWoot - Livechat and agent collaboration over Facebook messenger.
  • VueA - VueJS Admin template with multiple layouts and laravel version.
  • Teleo - Team collab-app moving effortlessly between talking, planning & doing

Apps/Websites

  • Laravel Spark
  • Vice Video
  • Formlets
  • Laracasts
  • esa.io
  • 稀土掘金
  • Prague Airport
  • Portfolio Site
  • Laravist
  • Atiiv - An app aimed for personal trainers and their clients.
  • Statamic
  • Embalses! - A tool to report water dam level using the U.S. Geological Survey database.
  • TravelMap - A simple way for travellers to create a blog based on a Map.
  • Proper Cloth Shirt Builder - Custom shirt builder.
  • CheckIt
  • Reddit News - A browser extension which show notifications and news from reddit.
  • Powerpuff Yourself by Cartoon Networks
  • 小桃酱
  • cloudradioo - Web app that plays randomly all top 50 songs from the soundcloud charts
  • vNotes - Simple and beautiful notepad to Markdown with Vue.js and Local Storage API.
  • Open Function Computers
  • Dermail - A webmail client written in Vue.js for Dermail, a mail system written in node.js.
  • octimine - A patent search engine.
  • Draxed - A web based MySQL and PostgreSQL data browser and dashboard manager.
  • Leapspotleap - A simple way to look up wikipedia articles near you. Or simply navigate to a place and find interesting wikipedia information. Responsive web app.
  • X-SONGTAO - A Personal blog. FE and CMS are in same vue SPA.
  • Jobinja - A Job Board and career platform operating in Iran.
  • 滚蛋吧!莆田系 - Show all Putian hospital information
  • Jobi : Recruiting Platform
  • The Spice House - Ecommerce website for high quality spices. Checkout, cart, the product detail page, and search are built using Vue. Checkout is a single page app written with Vue & Vuex.
  • Livestorm - Webinar / Live events app.
  • Metric Loop - A technology services and solutions website.
  • Holden
  • Global-Exam - Online Training for Language Proficiency Tests
  • SlugSurvival - A webapp that helps student better plan their courses (hobby project, not in affiliation with UCSC).
  • FreePoll.Online - A group decision making tool built using Vue.js, vue-sortable, Semantic UI and Zappa.
  • GitRelease - Track github project's new release on mac menubar using vue.js with electron.
  • 12BAY.VN - Applications online flight bookings.
  • PLAYCODE.IO - Playground for Rapid Frontend Experiments.
  • The Void Radio - Underground House Music Online Radio.
  • Bitly Vue - Shorten URLs with VueJS & Bitly API.
  • Storyblok - API Based/Decoupled CMS using VueJS for its frontend.
  • WizzAir
  • Moving to HTTPS - Guide to moving different platform/hosting sites to HTTPS
  • Booknshelf - Discover great books and bookshelves on different topics.
  • Top HN - A real time display of top news activity on Hacker News
  • Euronews - Euronews is a multilingual news media service, headquartered in Lyon, France.
  • Roozame روزامه� - Roozame is a persian smart news media service.
  • Koumoul
  • NinjaCalc - A suite of embedded engineering related calculators, built as an open-source single-page app with vue.js.
  • Vue.js Feed - The latest Vue.js news, tutorials, plugins, and more. Made with Vue.js and Laravel, based on Vuedo.
  • 蒜瓣 - A web app developed with Vue2.0 and Douban API
  • Guess Right - A 'guess the word' game - Written with Vue/vuex/vue-router (front-end) and Laravel/MySQL (back-end). Code is Open Source on GitHub (although not the live files that run the game at kdcinfo).
  • GRAP - Business communication service
  • Easy Mock  - mmf-blog-vue2-ssr A blog built with Vue 2.0, vue-router & vuex, with server-side rendering
  • JSON Schema Editor - An intuitive editor for JSON schema built with Vue.js and Firebase.
  • Winsome Trivia - A single or multiplayer trivia game featuring over 2,000 unique questions built with Vue.js and powered by the Open Trivia Database.
  • Moon Organizer - Lunar calendar app
  • Flash-Vue - ‘Flashcards of the Future’ bring learning everywhere 🚀
  • Kinderbesteck - A full Online Shop SPA with Vue2.0, Vuex, Vue Router
  • n2ex - A vue ssr(nust) website, use v2ex API
  • Power Thesaurus - A crowdsourced online thesaurus
  • Chattanosy - A community-powered database of new things and places in Chattanooga, TN.
  • PAIXIN - A genuine picture sale website
  • CodeBottle - Drag-and-drop snippets to your projects
  • 1XBET - A betting company operating since 2007
  • MyOwnTV - A streaming website for creating internet television
  • CrowdCircus - Europe’s biggest crowdfunding- and crowdinvesting-aggregator
  • Talk to Someone - Free, anonymous and confidential online text chat with strangers around the world.
  • 轮子工厂 - A ui components and libraries sharing website
  • ابیات ناب پارسی - A collection of Persian poems
  • Ripplectron - Ripple(Blockchain coin) Wallet Desktop client for vue-electron
  • PingBreak A free and simple website monitoring service using vuejs for real-time dashboard
  • Todoist Tribute - Todoist clone, written in Rails + Vue
  • JSON Editor - A schema-aware JSON editor built with Vue2 and firebase.
  • Develteam - A social network for indie game developers.
  • Mixsii - A free video chat room site for teens, adults, family, and friends.
  • PipQuest - A retro-style puzzle game built in Vue
  • Matryx - A decentralized collaboration platform.
  • iPrevYou - YouTube™ Player - A chrome app for watching youtube videos on your desktop.
  • Item Manager - An application to transfer items for Destiny 2 game.
  • Frontend Masters Intro to Vue - Frontend Masters full day course
  • TR-101 - A drum synth / sequencer.
  • Bazaar - Media sharing platform.
  • WynnStats - A unofficial WynnCraft statistics.
  • Save Coins - Save Coins helps Nintendo Switch owners to save money on Nintendo eShop.
  • Vectr - A free vector graphics software
  • brain bits - A P300 online spelling mechanism for Emotiv headsets
  • Coin Dashboard - The fully client-side cryptocurrency asset dashboard.
  • Habitica - online task management application in the form of a role-playing game.
  • MadeWithVueJs - A Gallery of Projects made with Vue.js (also the Site itself uses Vue.js)
  • CodeDependencyScanner - A C# dektop application that display .Net assembly code dependencies build with Vue, Neutronium and D3.js.
  • Thousand Ether Homepage - The Million Dollar Homepage reimagined as an Ethereum DApp. Build on Vue.js and open source.
  • Let's Enchance - free online image upscale and enhancement with neural networks.
  • Pi.TEAM - Online Invoicing and Accounting - Simple to use online accounting and invoicing, free for single users and freelancers.
  • Vuethwallet - A simple app generate ethereum wallet with vuejs.
  • Tipe - Next Generation API-first CMS. Create your content with powerful editing tools and access it from anywhere with a GraphQL or REST API. Stop letting your CMS decide how you build your apps.
  • Vuethexplore - A simple app explore ethereum blockchain with vuejs.
  • Fintechers - Fintech focused job board.
  • Devjournal - Collaborative todo list for projects and ideas.
  • Bubbleflat - Online platform that helps students and young Professionals find their perfect roommates by searching for people with similar lifestyles, interests, or schools. Laravel & Vuejs
  • TeaQuinox Tea Co -- ecommerce site that specializes in loose leaf tea.
  • blip - Test websites for speed, mobile-friendliness, security and the HTML5 doctype. Find businesses around a location and test their websites en masse, or just test your own URL.
  • sunpos - Sun position, elevation, azimuth, ecliptic/equatorial coordinates and sunrise/sunset time (Julian day) calculation and conversion utilities. Web site is programmed using pure JS, Vuejs and i18n Vuejs localization plugin. Visualization is created using D3.js.
  • U3xyz - A personal blog base on vue ssr.
  • 27.ua - Ukraine-based internet hypermarket
  • Chess Guardian - Answer chess positional questions from your own games.
  • Blackjack Break - A quick game of blackjack
  • MECHANICAL - Reddit mod for Firefox that surfaces contextual data insights.
  • GameVix - Swap your used video game discs with others, hassle free. PWA with Material Design.
  • VivifyScrum - Agile project management app for teams that deliver. Customizable Scrum and Kanban boards.

Interactive Experiences

Enterprise Usage

Components & Libraries

UI Components

Table

Tables / data grids

  • vuetable-2 - Data table simplify.
  • vue-tables-2 - Vue.js 2 grid components.
  • vue-datasource - A vue.js server side component to create dynamic tables.
  • ag-grid-vue - Vue adaptor for ag-Grid.
  • vue-data-tables - Vue2.0 DataTables, based on element-ui.
  • vue-floatThead - Vue 2.0 component for floatThead, a floating & sticky table header plugin.
  • vuetiful-datatable - Datatable component with sorting, filtering, pagination, grouping and aggregation.
  • vue-materialize-datatable - VueJS datatable for Materialize CSS
  • vue-good-table - An easy to use, VueJS (2.x) table plugin with sorting, column filtering, pagination etc.
  • vue-grid - A flexible grid component for Vue.js
  • vue-easytable - A powerful table components based on Vue2.x
  • vue2-datatable-component - The best Datatable for Vue.js 2.x which never sucks
  • vue-js-grid - Vue.js 2.x responsive grid system with smooth sorting, drag-n-drop and reordering
  • vue-handsontable-official A Vue.js wrapper for the the Handsontable spreadsheet component
  • vue-grid - A powerful flexbox grid system for Vue.js 2.x, built with inline-styles
  • vue-data-tablee - Based on vue-good-table, a simple and pretty table component
  • vue-scrolling-table - Simple table component with flexbox sizing, scrolled table body (horizontal and vertical), slots for all tr/th/td rendering.
  • el-search-table-pagination - Combines Form, Table and Pagination components of Element UI together. Based on Vue 2.x.(Detail)
  • vue-crud-x - Extensible crud component using Vuetify layout, other than the usual page, sort, filter, it is able to do nested CRUD, custom forms, filters, operations.
  • Vue Datatable - VueJS powered Datatable with Laravel server-side loading and JSON template setup
  • v2-table - A simple table component based Vue 2.x.

Notification

Toaster / snackbar — Notify the user with a modeless temporary little popup

Loader

Loaders / spinners / progress bars — Let the user know that something is loading

Progress Bar

A slim progress bar at the top of the page

Tooltip

Tooltips / popovers

Overlay

Overlay / modal / alert / dialog / lightbox / popup

  • vuedals - A VueJS (2.x) Plugin for multiple modals windows with a single component instance.
  • sweet-modal-vue - The sweetest library to happen to modals. Now available for Vue.js.
  • vue-js-modal - Simple to use, highly customizable, mobile friendly Vue.js 2.0+ modal with 0 dependencies.
  • vudal - Modal window for vue.js
  • vodal - A vue modal with animations.
  • vue-image-lightbox - A Vue image lightbox/gallery to display images nicely.
  • vue2-simplert - Vue 2 Simple Alert Component (SweetAlert Inspired) By Irfan Maulana
  • Vue-Semantic-Modal - Vue 2 Semantic-UI modal component without jQuery dependency
  • v-img - Easy to install image gallery.
  • vue-dialog-drag - Draggable dialog
  • vue-ya-semantic-modal - Yet another semantic-ui modal component for Vue2 without Jquery but with Vue transition
  • vue-pure-lightbox - Very simple lightbox plugin without any dependencies - only Vue! 🖼
  • v-viewer - Image viewer component for vue, supports rotation, scale, zoom and so on, based on viewer.js
  • vue-messagebox - Easy and made-to-order messagebox component on Vue.
  • vuejs-dialog - A lightweight, promise based alert, prompt and confirm dialog.
  • @hscmap/vue-window - Window UI Component for vue2.
  • vue-gallery - VueJS responsive and customizable image and video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers. Based on blueimp-gallery
  • vue-swal - A small wrapper for integrating SweetAlert to Vuejs. (Compatible with SSR)
  • vue-modal-dialogs - Promisify your own dialogs!
  • vue-img-view - a plugin for Vue.js, you can drag / view / rotate pictures anywhere
  • vue-modaltor - most advance configurable modal component for vuejs

Parallax

  • vue-parallax - Scrolls an image slower than the window to create a neat optical effect.
  • vue-parallaxy - Vue.js component for parallax image scroll effects.

Icons

  • vue-awesome - Font Awesome component for Vue.js, using inline SVG.
  • vue-material-design-icons - A collection of SVG Material Design icons as single file components.
  • vue-icon-font - A iconfont plugin for Vuejs (support Font-class and Symbol).
  • vue-ionicons - Vue Icon Set Components from Ionic Team.
  • vue-ico - Dead easy icons for Vue with drop-in browser support & selective bundling
  • mdi-vue - Material Design Icon components for Vuejs
  • vue-fontawesome - Font Awesome 5 Vue component
  • g-icon - Simple icon component for your svg icons (compatible with Font Awesome-like font toolkits)

Menu

  • vue-accordion - Simple accordion nav menu component for Vue.js.
  • vue-js-dropdown - Vue.js 2 dropdown menu component. Light, easy to use and extend, no external deps.
  • vue-slideout - Vue implementation of the popular library slideout
  • vue-quick-menu - This is web navigation component base on vue.js2.
  • @hscmap/vue-menu - Menu / Context Menu component for vue2.
  • vue-router-nav - Minimalistic responsive navigation bar that renders routes of vue-router.
  • vue-drawer-layout - A simple DrawerLayout component like Android has for Vue.js.
  • vue-simple-menu - Simple menu component with a set of basic functionality, which is enought in 80% of cases
  • vue-tree-navigation - Vue.js 2 tree navigation with vue-router support
  • bp-vuejs-dropdown - Vuejs => 2 dropdown. Easy to use, no external, optional.
  • vue-bulma-accordion - Simple, easily configurable accordion or collapsible styled with Bulma custom or built in icons available

Carousel

  • vue-easy-slider - Slider Component of Vue.js.
  • vue-l-carousel - A responsive carousel(namely slider or swiper) component for Vue.js v2.x+.
  • vue-awesome-swiper - Swiper(slide) component for Vue.js(1.x ~ 2.x).
  • vue-lory - Vue Slider Component based on lory.
  • vue-slick - Vue component for Slick-carousel.
  • vue-flickity - A Vue Component for Flickity.js.
  • vue-carousel-3d - Vue Carousel 3D - Beautiful, flexible and touch supported 3D Carousel for Vue.js.
  • vue-carousel - A flexible, responsive, touch-friendly carousel for Vue.js.
  • vue-coverflow - A vue2.x coverflow component.
  • vue-agile – A carousel component inspired by Slick, written in Vue.js and vanilla JS only.
  • vue-tiny-slider – A carousel component created by ganlanyuan, written in Vue.js. No jQuery. Works in IE8+.
  • vue2-text-swimlane - A Text Swimlane plugin for Vue.js

Charts

  • vue-morris - VueJS component wrapping Morris.js.
  • vue-charts - Google Charts plugin for Vue.js.
  • vue-chartjs - Vue.js wrapper for Chart.js.
  • hchs-vue-charts - Based on Vue2.0 wrapper for ChartJs.
  • vue-echarts - ECharts component for Vue.js.
  • vuetrend - Simple, elegant spark lines for Vue.js.
  • vue-highcharts - Highcharts component for Vue.
  • vue-echarts-v3 - Vue.js(v2.x+) component wrap for ECharts.js(v3.x+).
  • vue-chartist - Vue.js 2.0 component wrap for Chartist.
  • g2-vue - Factory wrapper for using G2 easily in a Vue Component.
  • vuebars - Simple, elegant spark bars for Vue.js.
  • vue-d3-network - Vue component to graph networks using d3-force
  • vue2vis - Vue2 wrapper for Visjs.
  • vue-c3 - A reusable vue component for c3 charts
  • vue-d2b - Vue components for d2b charts. (Including axis, pie, sankey, and sunburst charts)
  • VueChart - A very simple Vue wrapper for Chart.

Time

Display time / date / age

Calendar

Display non-editable events in a Calendar

  • vue-fullcalendar - Vue calendar fullCalendar. No jQuery required. Schedule events management.
  • vue-event-calendar - A simple events calendar for Vue2, no dependencies except Vue2.
  • vue-calendar-picker - Lightweight calendar component for events display, period selection and date picker.
  • vue-lunar-calendar - A vue component for lunar calendar. Uses Moment.js for date operations.
  • vue-simple-calendar - Flexbox-based Vue month calendar compenent; supports multi-day events, localization, holiday emoji, drag/drop. No dependencies.
  • vue2-calendar - A simple full calendar component aimed at beeing flexibile and lightweight.
  • vue-jlunar-datepicker - A Chinese lunar datepicker component with festivals and solar terms.
  • vue-full-calendar - A complete fullcalendar.io wrapper for both Vue 1 and 2
  • v-calendar - Animated calendar/datepicker that displays regions, indicators and day popovers for simple & recurring dates.
  • vue-infinite-calendar - A simple infinite calendar implementation for Vue 2
  • vue-calendar - A simple calendar components for Vue 2.1.5+ ,support custom content. No dependencies.

Map

Audio / Video

  • vue-aplayer - A Vue 2.x component of easy-to-config music players with controls.
  • vue-audio - audio-tag wrapper; sound player component for Vue 2.x
  • vue-dplayer - A Vue 2.x video player component based on DPlayer.
  • vue-canvasvideo - A Vue 2.x component for video backgrounds and autoplay video on iOS/Safari.
  • vue-music - A Vue component base on html5 .
  • vue-audio-visual - Vue HTML5 audio visualization components.

Infinite Scroll

Pull-to-refresh

  • vue-pull-refresh - A pull to refresh component for Vue.js 2.0.
  • vue-pull-to - A pull-down refresh and pull-up load more and infinite scroll for Vue.js component.
  • vue-data-loading - Another component for infinite scroll and pull down/up to load data.

Markdown

  • vue-markdown - A Powerful and Highspeed Markdown Parser for Vue.
  • vue-mavonEditor - A markdown editor based on Vue that supports a variety of personalized features.
  • vue-simple-markdown - A Simple and Highspeed Markdown Parser for Vue.

PDF

  • vue-pdf - A pdf viewer based on mozilla's PDF.js

Tree

Social Sharing

  • vue-social-sharing - A Vue.js component for sharing links to social networks, work with Vue.js 1.X or 2.X.
  • vue-goodshare - Vue.js component for social share with beautiful button design. Simple install, extensive documentation, developer support, SEO friendly, clean code without scripts tracking user activity on the page, high speed. Work with Vue.js 2.x.

QR Code

  • vue-qriously - A Vue.js 2 component to draw QR codes on an HTML Canvas using qrious.
  • vue-qart - The directive of vue 2.x for qart.js.
  • vue-qrcode-reader - A Vue.js 2 component which detects and decodes QR codes from a camera stream.

Search

  • vue-fuse - A lightweight pluggin for fuzzy search library, Fuse.js
  • vue-instantsearch - The ultimate toolbox for creating instant-search experiences using Algolia.

Miscellaneous

  • vue-avatar - An avatar component for vue.js.
  • vue-touch-ripple - Touch ripple component for Vue.js(1.x ~ 2.x).
  • vue-typer - Vue component that simulates a user typing, selecting, and erasing text.
  • vue-keyboard - Vue 2 virtual keyboard component.
  • vue-twentytwenty - Image comparison component, works with Vue.js 2.x
  • vue-cookie-law - Cookie info plugin for Vue.js 2.x
  • vue-gravatar - A dead-simple gravatar component for Vue.js 2.x
  • vue-clipboard2 - An easy to use clipboard.js binding for Vue.js 2.x
  • vue-flashcard - FLashcard component with animation for Vue.js 2.x 💡
  • vue-truncate-collapsed - A simple component that truncates your text and adds a 'Read More/Show Less' clickable for Vue.js 2.x
  • vue-kanban - A flexible drag and drop kanban board component
  • vue-letter-avatar - A simple and elegant letter avatar component for vue.js
  • vue-highlightjs - Syntax highlighting with highlight.js
  • v-clipboard - Simple, tiny and easy to use directive to save your models to clipboard (less than 2kb minified, no dependencies)
  • vue-invisible-recaptcha - Super easy integration for Google's Invisible reCAPTCHA
  • vue-embed - Embed component is based on embed.js for Vue 2.x, a component that embeds emojis, media, maps, tweets, gists, code, services and markdown.
  • vue-particles - Vue.js component for particles backgrounds
  • vue-uniq-ids - Vue.js 2.x plugin that helps to use id-related attributes with no side-effect
  • vue-multivue - Use multiple vue apps of the same class on the same page.
  • vue-affix - A Vue.js 2.x plugin that affixes an element in the window while you scroll, similar to Bootstrap Affix but much simpler and smarter
  • X-Browser-Update-Vue - A Vue.js browser-update plugin.
  • vue-query-builder - A UI component for building complex queries with nested conditionals.
  • vue-info-card - A simple and beautiful card component with an elegant spark line and CSS3 flip animation.
  • v-offline - Simple, tiny and easy to use detection of offline & online events for your Vue app (less than 390b minified)
  • vue-word-cloud - A word cloud generator.
  • vue-flat-surface-shader - A Vue component for flat surface shader
  • vue-easteregg - Easey add an easteregg to your vue app (default with konami code)
  • vue-barcode-scanner
  • vue-heatmapjs - A Vue directive for tracking and visualising mouse activity
  • vue-maze - An itty-bitty maze game made as Vue.js component
  • vue-drag-verify - This is a vue component, which is sliding to unlock for login or sign up.
  • vue-balloon - Vue components for creating fixed, zoomable containers in the corner of a page. Similar to the mail composition wrapper used in gmail.
  • vue-sticker - Sticker effect to any directions
  • v-rating - ⭐️ Rating component in Semantic-UI made with VueJS (< 500B gzipped, blazing fast)
  • vue-content-placeholders - Composable components for rendering fake (progressive) content like facebook in vue
  • vue-page-designer - Vue component for drag-and-drop to design and build mobile website.
  • vue-creativecommons - CreativeCommons.org Vue.js components library.
  • vue-status-indicator - A Vue.js component to show status indicator as colored dots.
  • vue-google-adsense - Vue.js Google Adsense Component with InFeed and InArticle Ads support
  • emoji-vue - Emoji 😎👌🏻 dropdown for Vue.js project
  • vue-chessboard - Chessboard vue component to load positions, create positions and see threats.
  • vue-mindmap - Vue component for mindnode maps.

Tabs

Form

Let the user create & edit data

Editable

Picker

  • vue-smooth-picker - A smooth picker component for Vue 2.x, like iOS native datetime picker.

Generator

Date Picker

Date / datetime / time Picker

Select

  • vue-select - A native Vue.js component that provides similar functionality to Select2 without the overhead of jQuery.
  • vue-multiselect - Universal select/multiselect/tagging component for Vue.js.
  • stf-vue-select - most flexible and customized select Vue2
  • vue-select-image - Vue 2 Component for selecting image from list
  • @riophae/vue-treeselect - A multi-select component with nested options for Vue.js
  • @k186/pd-select - A mobile UI component like IOS picker for Vue 2.x,can be wheel pick what ever you defined.
  • vue-dropdowns - A minimalistic and adaptable way to display select boxes if using objects for vue2.x

Slider

Drag and Drop

  • vuedraggable - Vue component allowing drag-and-drop sorting in sync with View-Model. Based on Sortable.js.
  • vue-dragula - Drag and drop so simple it hurts.
  • vue2-dragula - A vue-dragula fork for Vue2, with a lot of improvements.
  • awe-dnd - A sortable list directive with Vue.
  • vue-draggable-resizable - Vue2 component for draggable and resizable elements.
  • vddl - Vue components for modifying lists with the HTML5 drag & drop API, supports VueJs versions 1 and 2.
  • vue-drag-drop - A minimal and lightweight wrapper for the HTML5 Drag and Drop API.
  • vue-swing - A swipeable cards interface, as seen in apps like Jelly and Tinder.
  • vue-slicksort - A dependency-free set of mixins for animated, touch-friendly, sortable lists
  • draggable-vue-directive - A simple directive to handle drag and drop of any Vue component.

Autocomplete

Autosuggest / autocomplete / typeahead

  • vue-instant - Vue instant allows you to easily create custom search controls with auto suggestions for your vue 2 applications.
  • v-autocomplete - Autocomplete component for Vue.js
  • vue-awesomplete - Vue wrapper for Awesomplete
  • vue-auto-complete - Autocomplete for Vue2. Works with objects or api calls.
  • vue-autosuggest - WAI-ARIA complete Autosuggest component with full customization over rendering and styling.
  • v-autosuggest - A simple modular Vuejs component that autosuggest input from a dyanamic or static data querying.
  • autocomplete - Simple Autocomplete component for Vue.js 2.*

Type Select

Let the user select a tag / something while typing

  • vue-tagsinput - A tags input component based on Vue.js.
  • vue-input-tag - Vue.js 2.0 Input Tag Component.
  • v-distpicker A flexible, highly available district picker for picking provinces, cities and districts of China for Vue.js 2.x.
  • vue-img-inputer A graceful, highly customizable img type input for Vue 2
  • vue-img-preview An image input preview component in vue 2
  • v-image 📷 Tiny little component for input type=file (< 1kb, gzipped)
  • @voerro/vue-tagsinput A simple tags input Vue.js 2 component with typeahead/autocomplete

Color Picker

  • vue-color - Vue Color Pickers for Sketch, Photoshop, Chrome & more.
  • vue-swatches - Help the user picking beautiful colors!

Switch

Switch / on/off toggle / checkbox

  • vue-switches - An on/off switch component for Vue.js with theme support.
  • vue-js-toggle-button - Vue.js 2.0+ toggle / switch button - simple, pretty, customizable.
  • vue-checkbox-radio - A Vue component to easily styling checkbox and radio inputs.
  • vue-enhanced-check - Vue component to redesign/labelize checkbox/radio, including toggle/switch button.
  • pretty-checkbox-vue - Implementation of pretty checkbox 3(A pure CSS library to beautify checkbox and radio buttons) components for Vue.js 2.2+.
  • vue2-collapse - Vue Collapse is a flexible content toggling plugin for the accordion lists or any other conditional content rendering.

Masked Input

  • vue-masked-input - Masked input component for Vue.js.
  • vue-text-mask - Input mask for React, Angular, Ember, Vue, & plain JavaScript.
  • vue-ip-input - An ip input implemented by vuejs.
  • vue-numeric - Input field component to display currency value based on Vue.
  • awesome-mask - Mask directive based on a pure and simply VanillaJS implementation
  • v-money - Tiny (<2k gzipped) input/directive mask for currency
  • vue-autonumeric - A Vue.js component that wraps the awesome autoNumeric input formatter library
  • vue-inputmask - Vue.js directive to add Robin Herbots' inputmask library to your inputs (vanilla javascript).
  • vue-input-number - A custom input number component for Vue.js 2.
  • v-unicode - Vue directive to restrict an input by unicode values.
  • vue-cleave-component - Vue.js component for cleave.js
  • vue-ip - An ip address input with port and material design support
  • vue-r-mask - Directive with template similar to javascript regular expression.

Rich Text Editing

Image Manipulation

Edit images

  • vue-core-image-upload - A vue plugin for image to crop and upload.
  • vue-croppa - A simple straightforward customizable lightweight mobile-friendly image cropper for Vue 2.0.
  • vue-cropper - A picture clipping plugin for vue2.0

File Upload

  • vue-clip - Simple and hackable file uploader for VueJs. Supports Vue >= 2.1.
  • vue-simple-upload - Simple File upload component for Vue.js.
  • vue2-multi-uploader - A drag and drop multiple file uploader component that uses Vue.js v2 and Axios. Uploader shows file names, sizes and total size of files added. It also allows setting a minimum required number of files to upload.
  • vue-dropzone - A Vue.js (vue2) component for Dropzone.js - a drag’n’drop file uploads utility with image previews.
  • vue-transmit - A purely Vue.js drag & drop uploader component based on Dropzone.js for Vue 2.0
  • vue-upload-component - Vue upload component, Multi-file upload, Upload directory, Drag upload, Drag the directory. Supports Vue >= 2.0
  • vue-uploader - A Vue.js upload component powered by simple-uploader.js
  • ic-firebase-uploader - A clean multi-file upload component for Firebase storage.
  • vuejs-uploader - A resumable multipart file uploader for HUGE file uploads.

Context Menu

Miscellaneous

  • vue-gmaps - Search places and address using Google Maps API.
  • vuep - A component for rendering Vue components with live editor and preview.
  • vue-places - Places component is based on places.js for Vue 2.x. Turn any input into an address autocomplete.
  • vue-password-strength-meter - Password strength meter based on zxcvbn in vue.js.
  • vue-float-label - Float label pattern for Vue.js.
  • vue-longpress - A VueJS (2.x) button component that requires you to keep pressing to confirm a given action.
  • vue-google-autocomplete - A Vue.js (2.x) autosuggest component for the Google Maps Places API.
  • vue-ip-input - An ip input component for Vue.js 2.x
  • vue-default-value - Vue.js 2.x directive to set a default value for editable elements with no affect to the model state
  • vue-model-autoset - A Vue.js plugin to workaround Vue limitation in observing dynamically added properties with v-model directive
  • vue-submit - Simple implementation of Ladda (1, 2) in less than 90 lines of code with no dependencies.
  • vue-rate - Rate component for Vue
  • vuetify-google-autocomplete - A Vuetify ready Vue.js (2.x) autosuggest component for the Google Maps Places API.
  • vue-ripple-directive - Material Ripple Effect as Vue Directive.
  • vue-fab - Vue Floating Action Button.
  • vue-complexify - Vuejs porting library from jquery.complexify.js.
  • vue-mc - Models and Collections for Vue.js
  • vue-stars - Highly customizable rating control (using stars or other characters)
  • vue-confirmation-button - Customizable confirmation button that requires users to read messages before performing an action

Wizard

  • vue-form-wizard - Tab based component which can replace classic bootstrap & jQuery form wizards
  • vue-stepper - A simple stepper with simple actions such as next, back and end to perform simple forms.

CSV

  • vuecsv - A Simple CSV Downloader from json with option modal panel component.

Canvas

  • vue-easeljs - Data-driven control over an HTML5 canvas element.
  • vue-canvas-effect - A simple, canvas effect collection for Vue.js.
  • vue-konva - Vue & Canvas - JavaScript library for drawing complex canvas graphics using Vue.

Link Preview

  • link-prevue - Flexible component for generate a link preview.

UI Layout

Layout for the overall / main view

  • vue-waterfall - A waterfall layout component for Vue.js.
  • vueisotope - Vue component for isotope filter & sort magical layouts.
  • vue-grid-layout - A draggable and resizable grid layout, for Vue.js.
  • vue-drag-zone - Drag Zone component for Vue.js(2.x).
  • vue-masonry - Vue.js directive for masonry blocks layouting.
  • vue-fraction-grid - Flexbox based responsive fraction grid system for Vue.js.
  • vue-virtual-scroll-list - A vue (2.x) component support big data by using virtual scroll list.
  • vue-virtual-scroller - Component to scroll a large amount of elements efficiently (Vue 2.x).
  • vue-virtualscroll - [Vue 2.x] component to virtual scroll things.
  • vue-inview - [Vue 2.x] Viewport, get notification when DOM element is entered or leave.
  • dnd-grid - A vuejs grid with draggable and resizable boxes
  • vue-extend-layout - Extend the default layout or create custom layouts for the pages of your Vue.js SPA
  • vue-masonry-css - Vue.js Masonry layout component powered by CSS, dependancy free
  • vue-fullpage.js - Official fullPage.js component for Vue.js.

Frameworks

Responsive

Set of components + responsive layout system

Mobile

UI frameworks for mobile

  • Framework7-Vue - Build full featured iOS & Android apps using Framework7 & Vue.
  • vux - [Chinese] Vue UI Components based on WeUI.
  • vue-onsenui - Mobile app development framework and SDK using HTML5 and JavaScript. Create beautiful and performant cross-platform mobile apps. Based on Web Components, and provides bindings for Angular 1, 2, React and Vue.js.
  • Weex - Weex provides the ability to publish cross platform, so web, Android, and IOS apps can use the same API development functions.
  • weex-eros - [Chinese] Eros is a app solution based on Weex and Vue, which enables you to use API of Vue, simple and quick development of small and medium app.

Component Collections

Set of components without layout system

  • vue-mdc - Material Components Web for Vue.js.
  • keen-ui - A lightweight collection of essential UI components written with Vue and inspired by Material Design.
  • vue-admin - Vue Admin Panel Framework, Powered by Vue 2.0 and Bulma 0.3.
  • vuikit - UIkit with all the power of Vue.
  • uiv Bootstrap3 components implemented by Vue2.
  • yuche/vue-strap - Bootstrap 3 components built with Vue.js 1
  • wffranco/vue-strap - Bootstrap 3 components built with Vue.js 2
  • N3-components - Beautiful Web Components built with Vue 2
  • jsmod-vue-pc - Highly scalable web components for vue 2.0
  • guilhermewaess/SemVue - Semantic-ui Modules implemented with Vue 2
  • office-ui-fabric-vue - Office UI Fabric implementation for Vue.js
  • vuestic-admin - Vue Admin Dasboard with collection of custom components. Built with Vue 2 and Bootstrap 4
  • Semantic UI Vue - Semantic UI integration for Vue
Mobile

Set of components for mobile

  • mint-ui - Mobile UI elements for Vue.js.
  • vant - A Vue.js 2.0 Mobile UI From YouZan.
  • cube-ui - A fantastic mobile ui lib implement by Vue.js 2.

Admin Template

Set of admin template

  • iView Vue Admin - iView Vue Admin / An admin portal template based on iView 2.x
  • element Vue Admin - element Vue Admin / An admin portal template based on Element UI 2.x

Other

  • nuxt - Versatile Vue.js Framework.
  • app-framework - IOS and Android Apps with HTML & JavaScript - develop, build and deploy - free and open source.
  • Myfirebase - A decoupled Single page application Framework which is highly compatible with google firebase.
  • Vue-Access-Control Frontend access control framework based Vue.js 2.

UI Utilities

Event Handling

Handling of user events (scroll, click, key strike, ...)

  • vue-shortkey - Vue-ShortKey - plugin for Vue.js.
  • vue-throttle-event - Throttle events based on requestAnimationFrame.
  • vue-waypoint - Waypoint component for Vue, this is the easiest way to trigger a function when you scroll.
  • vue-clickaway - Reusable clickaway directive for reusable Vue.js components.
  • vue-scrollfire - Fires an event on a specific scroll position.
  • vue-resize-directive - Vue directive to detect resize events with deboucing and throttling capacity.
  • v-click-outside - Vue directive to react on clicks outside of an element without stopping the event propagation.
  • vue-outside-events - Vue 2.x directive to help a specified element listen for specific events occurring outside of itself.
  • vue-selectable - Vue 1.x/2.x directive to make items selectable by mouse.
  • vue-click-helper - Vue2.x directive to handle click event and dblclick event on same element.
  • v-hotkey - Vue 2.x directive for binding hotkeys to components.
  • vue-resize - Vue 2.x component to detect DOM elements resizing (event based/no window.onresize)
  • vue-observe-visibility - Vue 2.x directive using Intersection Observer API that detects if the element is visible (in the viewport and not hidden by CSS).
  • v-dragged - Vue 2.x directive plugin for drag event detection.
  • vue-esc - Vue.js directive to add a document event listener on escape keyup.
  • vue-global-events – A component to handle global events (like shortcuts) using Vue’s event modifiers
  • vue-edge-check – Check browser edge to prevent transition effect triggered oddly when swipe edge with vue-router

Responsive Design

  • vue-viewports - Define your custom viewports and use them in your components.
  • vue-responsive: Vue.js(2.x) directive to hide/show HTML-elements with the Bootstrap 4, 3 or self defined breakpoints.
  • vue-match-media - Vue 2.x-compatible plugin that offers a consistent, semantic approach to making components media query-aware.
  • vue-media-query-mixin - Vue 2 media query mixin that can be used in both component js and component template. Compatible with bootstrap and vuetify viewports. wXS returns if screen width is xs, wSM returns true if screen width is sm, etc...
  • vue-breakpoints - Vue 2 minimal components to show and hide elements based on breakpoints. Inspired by Airbnb.
  • vue-mq - Offer some useful tools to quickly setup responsive design with a semantic and mobile-first API (Vue 2.x)
  • VueResizeSensor - A container that supports resize event.

Form

  • vue-formly - JavaScript powered forms for Vue.js.
  • vue-focus - A reusable focus directive for reusable Vue.js components.
  • vue-form-generator - A schema-based form generator component for Vue.js.
  • vue-json-schema - Generate a form using JSON Schema and Vue.js
  • ic-formly - Simple form component powered by vue-formly.
  • Form Builder - Json template based form builder, based on Vue and Laravel.

Validation

  • vee-validate - Simple Vue.js input validation plugin.
  • vue-rawmodel - RawModel.js plugin for Vue.js v2. Form validation has never been easier.
  • vuelidate - Simple, lightweight model-based validation for Vue.js.
  • simple-vue-validator - A simple yet flexible validator library for vue.js.
  • vue-vform - Vue.js 2 form component that integrates jQuery Validation and Axios.
  • vue-form - Comprehensive form validation for Vue.js.
  • vuelidation - simple, powerful, vuejs validation.
  • laravel-vue-validator - Display errors from laravel validation rules
  • vuejs-model-validator - VueJS style data component validation. Easiness, simplicity, accurate.
  • willvalidate - Validation Forms for Vue.js.

Scroll

Set window scroll position

  • vue-chat-scroll - Automatic scroll-to-bottom directive for Vue.js 2.0.
  • vue-scrollto - Adds a directive that listens for click events and scrolls to elements.

Virtual scrollbar

  • VBar - The virtual responsive cross-browser scrollbar component for Vue.js 2x.
  • Vuebar - Vue 2 directive for custom scrollbar that uses native scroll behavior. Lightweight, performant, customizable and without dependencies.
  • vue-detached-scrollbar - A simple scrollbar that can be detached from the container it is scrolling.
  • vuescroll - A virtual scrollbar based on vue.js 2x.

Detect when components enter viewport

  • vue-scrollview - A component utilizing scoped slots to detect when a vue component enters and leaves the viewport.
  • vue-scrollactive - Adds an active class in a menu item based on the current section in viewport, also scrolling to the section when clicking the menu item.
  • vue-intersect - A Vue component to add intersection-observer to a Vue component or HTML element.
  • vue-scrollmonitor - A Vue plugin to watch visibility state of elements inside viewport with a wide range of browsers supported (use provide/inject so compat vue@2.2.x)
  • vue-stroll - An Awesome CSS3 list scroll effects component for Vue.js 2.x.
  • navscroll-js - Highlights menu items as you scroll, and also scrolls to a section when a menu item clicked. Use as a vue component, a vue directive or with vanilla js.
  • vue-scrollwatch - A light plugin detecting scroll event,customize callback when element enter viewport,expose 'scrollTo' api to scroll to specific element .Using vue directive.

Customize the scroll behavior

.

Seamless scrolling

Routing

  • vue-router - The official router for Vue.js.
  • vue-router-storage - Router storage & resolve solution for Vue.js 2 & vue-router 2
  • vue-tidyroutes - Decentralized vue-router routes definitions
  • vue-routisan - Elegant route definitions for Vue Router based on Laravel routing system
  • vue-error-page - Provides a wrapper for router-view that allows you to show error pages without changing the URL

Lazy Load

Pagination

Animation

  • vue2-animate - A Vue.js 2.0 port of Animate.css. For use with Vue's built-in transitions.
  • animated-vue - A Vue.js 2.x plugin to easily use Animate.css animations as transitions. As easy as !
  • vue-lottie - A Vue.js 2.x plugin to render after effects animations based on bodymovin
  • Vueg - Make vue-router have a transition effect / 为 webApp 提供转场特效的开源 Vue 插件
  • v-animate-css - The easiest to implement Vue 2 directive for Animate.css
  • vue-mixin-tween - Mixin factory that adds tweened values to component context for animations
  • v-odometer - Smoothly transitions numbers with ease. Use this library to give your application a smooth animation, only applicable on numbers.
  • vue2-transitions Reusable Vue 2 transition components
  • vue-overdrive Super easy magic-move transitions for Vue apps 🎩

Meta Tags

Manage meta information in the document head

  • vue-head - Manage the meta information of the head tag, a simple and easy way.
  • vue-meta - Manage page meta info in Vue 2.0 components. SSR + Streaming supported.

Portal

Move a DOM node to a target DOM node

  • vue-dom-portal - An escape hatch for DOM Elements in Vue.js components.
  • portal-vue - A Vue Plugin to render your component's template anywhere in the DOM (Works on the virtualDOM level, doesn't move nodes within the DOM)

Filters

  • vue2-filters - A collection of standard filters Vue 1.* adapted for use in Vue 2.*.
  • morphling - A collection of standard and custom filters for Vue 2.
  • vue-currency-filter - Lightweight and Customizeable Vue 2 Currency Filter.
  • vue-trans - A simple filter to provide a similar way of translating to the Symfony trans.
  • vue-string-filter - Lightweight Vue 2 String Manipulation Filter.

SVG

  • vue-svgicon - A tool to create svg icon components. (vue 2.x).
  • vue-content-loading - Vue component to easily build (or use presets) SVG loading cards Facebook like.
  • vue-annotator - Annotate page using any SVG Element (rect, polygon, and many more, even HTML Element like canvas if wrapped in foreignObject)
  • vue-svg-sprite - A directive to simply use SVG sprite (vue 2.x).

Miscellaneous

WebGL

  • vue-3d-model - A 3D model viewer in Vue component.
  • vue-pano - A panorama viewer in Vue component.
  • vue-threejs - Vue bindings for Three.js.
  • VueGL - Vue.js components rendering 3D graphics reactively via three.js

Fullscreen

Utilities

Utilities not directly related to the UI

Typescript

HTTP Requests

Retrieve data over HTTP

  • vue-resource - The HTTP client for Vue.js.
  • vue-async-computed - Async computed properties for Vue.js.
  • vue-jsonp - A tiny library for handling JSONP request.
  • v-model - V-Model is a model plugin for Vue.js, like ng-resource.
  • vue-resource-mock - A helper to mock your http response, based on vue-resource's interceptor.
  • vue-async-data-2 - Async data loading plugin for Vue.js.
  • vue-api-request - A plugin that provides full control on your APIs, making your request simple, fast and easy to implement.
  • vue-fast-axios - Make requests with validations in a simple and beautiful way.
  • vue-async-properties - An asyncData and asyncComputed plugin with support for debouncing, transforming results, error handlers, loading/pending flags, lazy/eager requests.
  • vue-axios-plugin - A plugin that combines axios with Vuejs, making http request more easier.
  • vuex-api - A vuex plugin for effortlessly handle api calls.
  • zipkin-instrumentation-vue-resource - An interceptor for vue-resource that instruments outgoing HTTP requests with Zipkin

i18n

Internationalization / L10n / localization / translation

  • vue-i18n - Internationalization plugin for Vue.js.
  • vue-translate-plugin - VueJS plugin for translations.
  • vuex-i18n - Localization plugin for vue.js 2.0 using vuex as store.
  • vue-gettext - Translate your Vue.js applications with gettext.
  • vue-i18n - A small plugin for implementing translations in Vue.js.
  • vue-multilanguage - Support many languages in Vue.js 2.
  • vue-ts-locale - A plugin for implementing translations using Intl in Vue.js 2 with typescript support.
  • vue-i18next - A i18next wrapper to support translations in Vue.js 2.
  • vue-polyglot - Basic translation plugin for Vue.js 2 with async loading.
  • v-localize - Simple localization plugin for the amazing Vue.js.
  • vue-simple-i18n - Probably the thinnest library to end all Vue i18n solutions within 1kb

Custom Events

Persistence

LocalStorage etc.

  • vue-localstorage - Vue.js localStorage plugin with types support.
  • vue-ls - Vue plugin for work with LocalStorage from Vue context.
  • vue-pouch - Live and reactive bindings for PouchDB. Persist data in IndexedDB and sync with CouchDB.
  • vue-idb - Lists and huge lists management with IndexedDB (Dexie.js) only or automatically created and extendible vuex modules
  • vuejs-storage - Vue.js and vuex plugin to persistence data with localStorage/sessionStorage.
  • vue-browserstore - Browser storage wrapper.
  • VueStorage - Allows components to save and load their data across browser sessions.
  • vue-web-storage Another Vue.js plugin for localStorage and sessionStorage
  • vue-universal-cookies Isomorphic cookies plugin for Vue.js / Nuxt.js supports Browser, Express, http (node).

State Management

  • vuex - Centralized State Management for Vue.js.
  • vue-sync - Synchronize Vue State with the Browser URL, Server Backend, and other endpoints.
  • vuelm - Lightweight state management inspired by Elm architecture.
  • vue-duo - A tiny state management for Vue.js.
  • vuez - A simple but powerful State Management for Vue.js, with only 2 APIs.
  • vuet - Vue.js state management model for Agile Development
  • vue-ya-stash - Yet Another stash storage with update/patch event emitters simillar with v-bind.sync
  • vue-assign-model - Automatically assign elements value to model for Vue.js.
  • vue-stash - Easily share reactive data between your Vue components.
  • vue-mc - Models and Collections for Vue.js
  • vue-model - Model component for Vue.js
  • tuex - A mostly reasonable alternative to Vuex.
  • revuejs - A tiny, light and handy state management for vuejs 2, writing less verbose code.
  • lue - Vue and vuex based library, writing less verbose code.
  • vuex-lite - A 1KB Vuex with just state and mutations.

Redux

  • revue - Redux binding for Vue.
  • vuedeux - Binding Solutions for Vue & Redux.
    • redux-store-mixin - Mixin for integrate action creators in methods of vue-component
  • vuejs-redux - High order component facilities for Vue and Redux.

Mobx

  • movue - Mobx integration for Vue.js.
  • vue-mobx - Mobx binding for Vuejs 2.x.

Authentication/Authorization

Vuex Utilities

  • vuex-persistedstate - Persist Vuex state with localStorage.
  • vuex-plugin-jsdata - A plugin for syncing Vuex store with js-data.
  • vuex-local - Local state management within Vuex.
  • vuex-action - Utilities for vuex to easily create and manage actions.
  • vuex-rest-api - A Helper utility to simplify the usage of REST APIs with Vuex. Based on axios.
  • vuex-cache - A Vuex plugin utility to cache action those will make remote request.
  • vuex-persist - A Typescript-ready Vuex plugin to help save the store to localStorage or any custom Storage (that you can configure).
  • vuex-local-state - Add 'localState/sessionState' options to vuex. Keep the Vuex state with localStorage.
  • vuex-cli-scaffold - Scaffold vuex actions, mutations, getters and the state.
  • vuex-action-reload - A vuex plugin that reloads actions when a condition is met.
  • vuejs-storage - Vue.js and vuex plugin to persistence data with localStorage/sessionStorage.
  • vuex-orm - The Vuex plugin to enable Object-Relational Mapping access to the Vuex Store.
  • vuex-async-module - Reduce async boilerplate code generating Vuex modules. Compatible with Vue 2.x.
  • vuex-api - A vuex plugin for effortlessly handle api calls.
  • vuex-queries - Vuex-Queries helps you write query functions in Vuex
  • vuex-microservice - Define microservice URLs at a dedicated place and use them inside your Vuex actions.
Sync Between Tabs

Concurrency Management

  • vuency - Concurrency management for for Vue.js.

Code Style

Improve readability of code

CSS

  • vue-bem-cn - Simple BEM class name generator for Vue.JS.
  • vue-css - Vue.js plugin that allows you to bundle CSS with your components.
  • vue-mods-names - Adding modificators to class names for all components in app.
  • vue-styler - Simple, performant styler for vue.

Asset Management

Utilities for building / compiling / bundling / loading assets

  • vue-script2 - Standardized, designer-friendly script tag behavior for your Single Page App.
  • vue-loader - Webpack loader for Vue.js components.
  • vueify - Browserify transform for single-file Vue components.
  • vue-compiler - A simple cli wrapper around the vue-component-compiler.
  • vue-brunch - Adds support to Brunch for pre-compiling single file Vue components.
  • poi - Start writing an app with a single .js file, Poi could handle all the development setups for you, no more configuration hell.
  • http-vue-loader - Load .vue files directly from your html/js without node.js environment nor build step.
  • vue-jsx-hot-loader - Enable HMR for Vue.js components with JSX render functions.

Page Navigation

  • vue-navigation - A page navigation library, record routes and cache pages, like native app navigation. 一个页面导航库,记录路由并缓存页面,像原生APP导航一样。
  • vue-acl - Access Control List for VueJS 2.
  • vue-breadcrumbs - Implements simple breadcrumb functionality with vue-router for both Vue 1.x and Vue 2.x.
  • vue-2-breadcrumbs - breadcrumb together with vue-router for Vue 2.x. and Bootstrap 4
  • vs-crumbs - Vue breadcrumbs in 40 lines of code that allows nested paths without child views.
  • vue-nav - Page navigation manager, support all navigation function of native mobile app. 页面导航管理器,支持手机原生应用的所有导航功能。
  • vue-2-crumbs - Breadcrumbs plugin for Vue.js 2 framework that allows to select parent route in route meta object with no need of sub-routing. Also allows using dynamic data.

Miscellaneous

Web Workers

  • vue-worker - A Vue.js plugin to use webworkers in a simply way.

JSX

  • jsx-vue-functional - A Babel plugin that brings syntactic sugar for Vue functional components.
  • jsx-event-modifiers - A Babel plugin that adds event modifiers similar to Vue templates to JSX.
  • jsx-v-model - A Babel plugin that brings v-model to JSX.
  • vue-jsx-sync - A Babel plugin that brings vue sync modifier to JSX.

Migration

  • vue-backbone - Vue.js Plugin to facilitate Backbone integration.

Web Sockets

  • vue-socket.io - Socket.io implementation for vuejs.
  • vue-websocket - Simple websocket (socket.io) plugin for Vue.js.
  • vue-echo - Integrates Laravel Echo into Vue, allows for easy registration of socket events.
  • vue-socket-cluster - Web Sockets for vue with uws(Micro web sockets) through socket cluster

Payment

Payment utilities.

Stripe

Integrations

Integrate with services or other frameworks

  • vue-disqus - Vue component to integrate Disqus comments in your application, with support for SPA.
  • vue-youtube-embed - Vue.js and YouTube.
  • vue-add-to-calendar - A Vue.js component that provides "Add to Calendar" functionality, works with Vue 2.X.
  • Vue + Meteor - Vue first-class integration in Meteor.
  • vue-apollo - Apollo/GraphQL integration for VueJS.
  • av-ts - A modern, type-safe, idiomatic Vue binding library.
  • Neutronium - Build .NET desktop applications using HTML, CSS and javascript.
  • vue-typescript-jest - Jest preprocessor.js for Vue.js components (supporting html, pug, and babel) and TypeScript.
  • vue-jest-utils - Utilities for testing Vue.js components using Jest.
  • vue-custom-element - Vue Custom Element - Custom Elements for Vue.js.
  • vue-cordova - Vue.js plugin for Cordova.
  • vue-wamp - AutobahnJS wrapper library fo Vue.js.
  • express-vue - Vue rendering engine for Express.js. Use .Vue files as templates using res.render().
  • vue-grecaptcha - Google reCAPTCHA for VueJS 2
  • vue-recaptcha - Google reCAPTCHA component for Vue.js
  • require-vuejs - RequireJS plugin to async and dynamic load and parse .vue components.
  • facebook-login-vuejs - Vue Component for Authenticating your Facebook App and get the benefits of Facebook Login.
  • vuejs/vuefire - Official Firebase Integration for VueJS
  • vuefire - Firebase for VueJS and Vuex
  • vue-runkit - RunKit Embed for Vue.js
  • vue-youtube - Provides a simple layer for you to use your imagination while over the YouTube IFrame Player API. (Compatible with SSR)
  • vue-introjs - Integrates intro.js step-by-step guide and feature introduction with Vue.js http://introjs.com/.
  • vue-loopback - Loopback and Vue application template
  • vue-laroute - Integrate Laravel routes into your VueJS application using laroute.
  • vue-raven - Automatically reports uncaught JavaScript exceptions triggered from vue component.
Google Analytics
  • vue-ua - Google Universal Analytics support in Vue.js.
  • vue-analytics - Vue plugin for Google Analytics.
  • vue-gtm - Vue plugin for Google Tag Manager
Yandex Metrika

Dev Tools

  • vue-dev-server - A small development server for building vue components.
  • vuepack.org - A simple page that allows you to select Vue components and download them as a single minified JS file.
  • Storybook - The UI Development Environment. works with v3.2+ later.
  • Font Awesome Finder - Chrome extension to search, preview and choose Font Awesome icons and copy the selected icon HTML code & Unicode to clipboard.
  • vue-dummy - Placeholder Text and Dummy Images as a simple v-dummy directive.
  • Bit - Manage and reuse vue components between projects. Easily isolate ans share components from any projec without chagning its source code, organize curated collections and install in different projects.

Inspect

Inspecting & debugging

  • Vue.js devtools - Chrome devtools extension for debugging Vue.js applications.
  • DejaVue - Visualization and debugging tool built for Vue.js.
  • vue-clicky - Right click any component to show info about it in the console.
  • vuejs-logger - Provides customizable logging functionality for Vue.js.
  • vue-bugsnag - Vue.js plugin for bugsnag v3.x error reporting
  • bugsnag-vue - Official Vue.js plugin for bugsnag error reporting
  • vue-inspector - Vue.js Inspector for Mobile Devices
  • Vue Performance Devtool - Vue Performance Devtool is a browser extension for inspecting the performance of Vue Components
  • VueSource - Global Vue mixin which identifies components in source code by adding HTML comments

Docs

Create documentation

  • vue-markdown-loader - Convert Markdown file to Vue Component.
  • vue-play - A minimalistic framework for demonstrating your Vue components.
  • vue-styleguide-generator - React inspired style guide generator for Vue.js.
  • CheatSheet - Complete Interactive API.
  • propdoc - A single component that provides simple documentation of Vue.js components/props.
  • Vuex CheatSheet - Complete Interactive Vuex API.
  • vue-styleguidist - A style guide generator for Vue components with a living style guide.
  • vue-elucidate - A component that generates beautiful documentation for your living styleguide / design system.
  • vue-md-loader - Markdown files to ALIVE Vue components.
  • @vuedoc/parser - Generate a JSON documentation for a Vue file component.
  • @vuedoc/md - Generate a Markdown Documentation for a Vue file.
  • jsdoc-vue-component - A jsodc3 plugin that extract vue SFC info(name, props, events...) to document.
  • jsdoc-vuedoc - A jsdoc3 plugin use @vuedoc/md.
  • vue-styleguidist - Created from react styleguidist for Vue Components with a living style guide

Test

  • avoriaz - A Vue.js testing utility library.
  • vue-container - A simple dependency injection library for Vue 2.
  • vuenit - Utilities for testing Vue components and directives.
  • vue-unit - A library for Vue.js that makes it easier to create and unit test components.
  • vue-a2b - A library for Split Testing with Vue.js. Highly configurable and tiny (1.2k gzipped).
  • vue-test-utils - Official utilities for testing Vue components.
Browser-less require

Load Vue components without browser

  • vuegister - Vuegister (a portmanteau of vue & register) is a require hook for loading of the Vue.js single-file components (or .vue files).
  • vue-node - Load vue components in node.

Source Code Editing

Text editor plugins

Atom

Sublime Text

Vim

  • Vim Vue - Syntax Highlight for Vue.js components.

Visual Studio Code

  • Vetur - Vue tooling for VSCode.

Visual Studio

  • VuePack - Contains HTML Intellisense and code snippets for the Vue.js JavaScript library.

Brackets

Intellij

  • Vue.js Plugin - Vue.js features for the Intellij Platform (WebStorm, RubyMine, Intellij, etc).
  • Vue.js support for WebStorm, IntelliJ IDEA, PhpStorm, PyCharm & RubyMine – official Vue.js support by JetBrains

Emacs

  • Vue Mode - Emacs major mode for vue.js.

Kate

  • Kate Syntax Files - Syntax files (modified or original) for katepart (kate, kwrite, kdevelop).

Scaffold

Scaffold / boilerplate / seed / starter kits / stack ensemble / Yeoman generator

  • vue-cli - Simple CLI for scaffolding Vue.js projects.
  • Vue-Django - A boilerplate to set you up in bringing the awesomeness of VueJS into a Django (Python) app.
  • python-vuejs - Gluing Python web frameworks and Vue.js with a set of scripts. Basically a vue-cli wrapper.
  • generator-vue-plugin - Yeoman generator generating vue plugin.
  • vue-seed - vue-seed is minimal seed for those looking to get up-and-running with Vue
  • nuxt-seed - nuxt-seed is minimal seed for those looking to get up-and-running with Vue and Nuxt
  • rails_vue_melt - Rails view with webpack=vue optimizer.
  • vue-starter - A Vue.js starter kit that lets you focus on more programming and less configuration.
  • vue-standalone-component - A standalone component generator with documentation support using jsdoc and vue-styleguidist
  • vuejs-wordpress-theme-starter - A WordPress theme with the guts ripped out and replaced with Vue
  • Cordovue - A sample Apache Cordova application using Vue.
  • Cookiecutter-Django-Vue - Django+VueJS+Docker customizable project generator with a large number of settings/integrations by (@vchaptsev)
  • iBiu A visual CLI for scaffolding large Vue projects in 2 seconds.
  • wp-vue - A simple Vue blog template that displays posts from a WordPress REST API endpoint.
  • vue-cli-template-nativescript - Template for starting new nativescript+vue projects with rollup+babel+eslint
  • vue-element-ui-scaffold - Online and visual Vue 2 with Element-UI CRUD scaffold/generator.
  • vue-firebase-element-ui-scaffold - Online and visual Vue 2, Element-UI and Firebase scaffold/generator with CRUDs, authentication, file/image upload, activity log and more.

Client

Render Vue application in the browser only

  • Vue Plugin Boilerplate - Boilerplate for Vue.js plugin.
  • Bourgeon - Bourgeon is an opinionated-featured VueJS 2.0 setup for Webpack.
  • VuePack - A modern starter which uses Vue 2, Vuex, Vue-router and Webpack 2 (and even Electron).
  • Vue Settler - An opinionated Vue 2.0 SPA Starter.
  • vue-build - Ultra Simple, Development, Testing and Production Build Cli.
  • Vue Element Starter - Robust Vue 2 starter with Element-UI.
  • vue-multiple-pages - A modern Vue.js multiple pages starter which uses Vue 2, Webpack2, and Element-UI
  • vue-typescript-boilerplate - A Vue.js typescript SPA starter with Vue 2, Vue Typed, Vuex, Vue Router and localization
  • vue-tachyons-template - A Vue 2 project starter template w/ Tachyons, Webpack, and ESLint
  • Vuets - A Vue, TypeScript ready boilerplate using class-style components, vue plugin options, webpack & vue-cli.
  • MMF-FE/vue-typescript - A vue2.x typescript template.
  • Friendly Vue Starter - A full featured Vue.js starter project with GraphQL support via Apollo-client (Vuex, Vue-router, Vue-i18n, Webpack 3, Eslint, Prettier, ...)
  • vue-webpack-typescript - A Vue 2.2 Webpack 2 and Typescript 2 setup with hot reload, unit testing, code coverage, sass and bundling/minification.
  • vue-ts-amd - A full-featured Vue.js 2 boilerplate using AMD pattern (RequireJS) and Typescript.
  • vue-2-boilerplate - Vue 2 boilerplate for developing medium to large single page applications by petervmeijgaard
  • layout - A full-featured Webpack + Vue Extend layout
  • layout-simple - A simple Webpack + Vue Extend layout
  • vue-cli-template-library - Template for developing open-source vue.js libraries with Rollup + Jest + Babel + Storybook + TravisCI + SemanticRelease.
  • vue-cli-template-github-pages - A full-featured Webpack + vue-loader setup for Github Pages Deployment with travisCI.

Universal

Render Vue application to HTML on the server and to the DOM in the browser

  • SPA Starter Kit - A highly opinionated starter kit for building Single Page Applications with Laravel and Vue.js.
  • SSR Boilerplate - Vue.js Server Side Rendering Boilerplate without Polluting Vuex.
  • neutrino-preset-vue-static - A minimalistic starter kit for building static sites using Vue.js.
  • Vueniverse - A fully featured, universal Vue template for user-based applications, powered by Nuxt.js and Express.
  • vue-preload - A plugin Vue for adding <link rel="preload" capabilities

Server

Includes a backend boilerplate

  • Vuetober - Single page apps with Laravel, Vue.js, and October CMS.
  • Toucan - Boilerplate for building single page apps. Server is multi-project .Net Core solution designed around SOLID principles. Client is TypeScript 2, Vuejs 2, Vuex 2.
  • vue-server-demo - Writing koa server in Vue.
  • vue-apollo-connector-kit - JWT authentication with 2 different strategies (localStorage and httpOnly cookies). Authorization using custom directives (apollo).

Electron

  • Electron Vue - An Electron & Vue.js quick start boilerplate with vue-cli scaffolding, common Vue plugins, electron-packager/electron-builder, unit/e2e testing, vue-devtools, and webpack.
  • VuePack - A modern starter which uses Vue 2, Vuex, Vue-router and Webpack 2 (and even Electron).
  • vue-flexible-link - Tiny Vue component for Electron to open links in a browser. Ideal for cross environment apps (Web & Native)

Parts

Scaffold parts of the app

  • vue-generator - A CLI generator for Vue components, views and store modules.
  • vue-component-generator - A generator for vue component, supports Vue1.X and Vue2.X.
  • rapydml_cmp - Vue-component pythonic generator, built on top of RapydML & RapydScript.
  • vue-authoring-template - Template for authoring also publishing Vue component and their use case in story-scenario (storybook) format in easy way.

Runtime

Command Line / Terminal

  • blessed-vue - A VueJS runtime to let you write command line UI in Vue Edit

Prerendering

  • react-snap - A zero-configuration static pre-renderer for SPA
  • prerender-plugin - A Node.js/ webpack plugin to prerender static HTML in a single-page application (SPA).



CC0

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - elastic/elasticsearch: Open Source, Distributed, RESTful Search Engine
Skip to content
Java Groovy Shell Python Perl Batchfile
Switch branches/tags
Latest commit 5a8ec9b Feb 22, 2018
tbrooks8 Selectors operate on channel contexts (#28468)
This commit is related to #27260. Currently there is a weird
relationship between channel contexts and nio channels. The selectors
use the context for read and writing. But the selector operates directly
on the nio channel for registering, closing, and connecting.

This commit works on improving this relationship. The selector operates
directly on the context which wraps the low level java.nio.channels. The
NioChannel class is simply an API that is used to interact with the
channel (sending messages from outside the selector event loop,
scheduling a close, adding listeners, etc). The context is only used
internally by the channel to implement these apis and by the selector to
perform these operations.
Permalink
Failed to load latest commit information.
.github Add version command to issue template Jul 30, 2017
benchmarks Upgrade Gradle Shadow plugin to 2.0.2 Dec 29, 2017
buildSrc Reduce max javac memory to 512mb (#28783) Feb 22, 2018
client [TEST] replace randomAsciiAlphanumOfLengthBetween with randomAsciiLet… Feb 21, 2018
dev-tools Added coming annotation and breaking changes link to release notes sc… Feb 17, 2018
distribution Build: Consolidate archives and packages configuration (#28760) Feb 22, 2018
docs Use client settings in repository-gcs (#28575) Feb 22, 2018
gradle/wrapper Bump Gradle to version 4.5 Feb 1, 2018
libs Selectors operate on channel contexts (#28468) Feb 22, 2018
modules Remove AcknowledgedRestListener in favour of RestToXContentListener (#… Feb 22, 2018
plugins Selectors operate on channel contexts (#28468) Feb 22, 2018
qa version set in ingest pipeline (#27573) Feb 21, 2018
rest-api-spec Fix BWC issue of the translog last modified age stats Feb 16, 2018
server Remove AcknowledgedRestListener in favour of RestToXContentListener (#… Feb 22, 2018
test Selectors operate on channel contexts (#28468) Feb 22, 2018
.dir-locals.el Go back to 140 column limit in .dir-locals.el Apr 14, 2017
.editorconfig Add simple EditorConfig Nov 30, 2015
.gitignore Introduce Gradle wrapper Jan 4, 2018
CONTRIBUTING.md Updated distribution outputs in contributing docs Feb 20, 2018
LICENSE.txt Create elasticsearch-cloud-azure project Aug 22, 2013
NOTICE.txt Build: Add notice file generation (#23170) Feb 15, 2017
README.textile [Docs] Correct typo in README.textile (#28716) Feb 19, 2018
TESTING.asciidoc Highlight the "hidden" REST API test suite (#28381) Feb 9, 2018
Vagrantfile [TEST] packaging tests: clean up Vagrantfile (#28173) Feb 2, 2018
build.gradle Revert "Disable BWC tests for build issues" Feb 22, 2018
gradle.properties Increase Gradle heap space to 1536m Dec 20, 2017
gradlew Introduce Gradle wrapper Jan 4, 2018
gradlew.bat Introduce Gradle wrapper Jan 4, 2018
settings.gradle Applied @colings86 changes to the build in order to make new module w… Feb 20, 2018

README.textile

Elasticsearch

A Distributed RESTful Search Engine

https://www.elastic.co/products/elasticsearch

Elasticsearch is a distributed RESTful search engine built for the cloud. Features include:

  • Distributed and Highly Available Search Engine.
    • Each index is fully sharded with a configurable number of shards.
    • Each shard can have one or more replicas.
    • Read / Search operations performed on any of the replica shards.
  • Multi Tenant.
    • Support for more than one index.
    • Index level configuration (number of shards, index storage, …).
  • Various set of APIs
    • HTTP RESTful API
    • Native Java API.
    • All APIs perform automatic node operation rerouting.
  • Document oriented
    • No need for upfront schema definition.
    • Schema can be defined for customization of the indexing process.
  • Reliable, Asynchronous Write Behind for long term persistency.
  • (Near) Real Time Search.
  • Built on top of Lucene
    • Each shard is a fully functional Lucene index
    • All the power of Lucene easily exposed through simple configuration / plugins.
  • Per operation consistency
    • Single document level operations are atomic, consistent, isolated and durable.
  • Open Source under the Apache License, version 2 (“ALv2”)

Getting Started

First of all, DON’T PANIC. It will take 5 minutes to get the gist of what Elasticsearch is all about.

Requirements

You need to have a recent version of Java installed. See the Setup page for more information.

Installation

  • Download and unzip the Elasticsearch official distribution.
  • Run bin/elasticsearch on unix, or bin\elasticsearch.bat on windows.
  • Run curl -X GET http://localhost:9200/.
  • Start more servers …

Indexing

Let’s try and index some twitter like information. First, let’s index some tweets (the twitter index will be created automatically):

curl -XPUT 'http://localhost:9200/twitter/doc/1?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "kimchy",
    "post_date": "2009-11-15T13:12:00",
    "message": "Trying out Elasticsearch, so far so good?"
}'

curl -XPUT 'http://localhost:9200/twitter/doc/2?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "kimchy",
    "post_date": "2009-11-15T14:12:12",
    "message": "Another tweet, will it be indexed?"
}'

curl -XPUT 'http://localhost:9200/twitter/doc/3?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "elastic",
    "post_date": "2010-01-15T01:46:38",
    "message": "Building the site, should be kewl"
}'

Now, let’s see if the information was added by GETting it:

curl -XGET 'http://localhost:9200/twitter/doc/1?pretty=true'
curl -XGET 'http://localhost:9200/twitter/doc/2?pretty=true'
curl -XGET 'http://localhost:9200/twitter/doc/3?pretty=true'

Searching

Mmm search…, shouldn’t it be elastic?
Let’s find all the tweets that kimchy posted:

curl -XGET 'http://localhost:9200/twitter/_search?q=user:kimchy&pretty=true'

We can also use the JSON query language Elasticsearch provides instead of a query string:

curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
    "query" : {
        "match" : { "user": "kimchy" }
    }
}'

Just for kicks, let’s get all the documents stored (we should see the tweet from elastic as well):

curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
    "query" : {
        "match_all" : {}
    }
}'

We can also do range search (the post_date was automatically identified as date)

curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
    "query" : {
        "range" : {
            "post_date" : { "from" : "2009-11-15T13:00:00", "to" : "2009-11-15T14:00:00" }
        }
    }
}'

There are many more options to perform search, after all, it’s a search product no? All the familiar Lucene queries are available through the JSON query language, or through the query parser.

Multi Tenant – Indices and Types

Man, that twitter index might get big (in this case, index size == valuation). Let’s see if we can structure our twitter system a bit differently in order to support such large amounts of data.

Elasticsearch supports multiple indices. In the previous example we used an index called twitter that stored tweets for every user.

Another way to define our simple twitter system is to have a different index per user (note, though that each index has an overhead). Here is the indexing curl’s in this case:

curl -XPUT 'http://localhost:9200/kimchy/doc/1?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "kimchy",
    "post_date": "2009-11-15T13:12:00",
    "message": "Trying out Elasticsearch, so far so good?"
}'

curl -XPUT 'http://localhost:9200/kimchy/doc/2?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "kimchy",
    "post_date": "2009-11-15T14:12:12",
    "message": "Another tweet, will it be indexed?"
}'

The above will index information into the kimchy index. Each user will get their own special index.

Complete control on the index level is allowed. As an example, in the above case, we would want to change from the default 5 shards with 1 replica per index, to only 1 shard with 1 replica per index (== per twitter user). Here is how this can be done (the configuration can be in yaml as well):

curl -XPUT http://localhost:9200/another_user?pretty -H 'Content-Type: application/json' -d '
{
    "index" : {
        "number_of_shards" : 1,
        "number_of_replicas" : 1
    }
}'

Search (and similar operations) are multi index aware. This means that we can easily search on more than one
index (twitter user), for example:

curl -XGET 'http://localhost:9200/kimchy,another_user/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
    "query" : {
        "match_all" : {}
    }
}'

Or on all the indices:

curl -XGET 'http://localhost:9200/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
    "query" : {
        "match_all" : {}
    }
}'

{One liner teaser}: And the cool part about that? You can easily search on multiple twitter users (indices), with different boost levels per user (index), making social search so much simpler (results from my friends rank higher than results from friends of my friends).

Distributed, Highly Available

Let’s face it, things will fail….

Elasticsearch is a highly available and distributed search engine. Each index is broken down into shards, and each shard can have one or more replicas. By default, an index is created with 5 shards and 1 replica per shard (5/1). There are many topologies that can be used, including 1/10 (improve search performance), or 20/1 (improve indexing performance, with search executed in a map reduce fashion across shards).

In order to play with the distributed nature of Elasticsearch, simply bring more nodes up and shut down nodes. The system will continue to serve requests (make sure you use the correct http port) with the latest data indexed.

Where to go from here?

We have just covered a very small portion of what Elasticsearch is all about. For more information, please refer to the elastic.co website. General questions can be asked on the Elastic Discourse forum or on IRC on Freenode at #elasticsearch. The Elasticsearch GitHub repository is reserved for bug reports and feature requests only.

Building from Source

Elasticsearch uses Gradle for its build system.

In order to create a distribution, simply run the ./gradlew assemble command in the cloned directory.

The distribution for each project will be created under the build/distributions directory in that project.

See the TESTING file for more information about running the Elasticsearch test suite.

Upgrading from Elasticsearch 1.x?

In order to ensure a smooth upgrade process from earlier versions of
Elasticsearch (1.x), it is required to perform a full cluster restart. Please
see the “setup reference”:
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html
for more details on the upgrade process.

License

This software is licensed under the Apache License, version 2 ("ALv2"), quoted below.

Copyright 2009-2016 Elasticsearch <https://www.elastic.co>

Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - gulpjs/gulp: The streaming build system
Skip to content
The streaming build system
JavaScript

README.md

The streaming build system

NPM version Downloads Build Status AppVeyor Build Status Coveralls Status OpenCollective Backers OpenCollective Sponsors Gitter chat

What is gulp?

  • Automation - gulp is a toolkit that helps you automate painful or time-consuming tasks in your development workflow.
  • Platform-agnostic - Integrations are built into all major IDEs and people are using gulp with PHP, .NET, Node.js, Java, and other platforms.
  • Strong Ecosystem - Use npm modules to do anything you want + over 2000 curated plugins for streaming file transformations
  • Simple - By providing only a minimal API surface, gulp is easy to learn and simple to use

Installation

There are a few ways to install:

  • gulp v4.0.0 - npm install gulp@next
  • gulp v4.0.0-alpha.3 - npm install gulpjs/gulp#v4.0.0-alpha.3
  • gulp v3.9.1 - npm install gulp

Documentation

For a Getting started guide, API docs, recipes, making a plugin, etc. check out our docs!

Sample gulpfile.js

This file will give you a taste of what gulp does.

var gulp = require('gulp');
var less = require('gulp-less');
var babel = require('gulp-babel');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var cleanCSS = require('gulp-clean-css');
var del = require('del');

var paths = {
  styles: {
    src: 'src/styles/**/*.less',
    dest: 'assets/styles/'
  },
  scripts: {
    src: 'src/scripts/**/*.js',
    dest: 'assets/scripts/'
  }
};

/* Not all tasks need to use streams, a gulpfile is just another node program
 * and you can use all packages available on npm, but it must return either a
 * Promise, a Stream or take a callback and call it
 */
function clean() {
  // You can use multiple globbing patterns as you would with `gulp.src`,
  // for example if you are using del 2.0 or above, return its promise
  return del([ 'assets' ]);
}

/*
 * Define our tasks using plain functions
 */
function styles() {
  return gulp.src(paths.styles.src)
    .pipe(less())
    .pipe(cleanCSS())
    // pass in options to the stream
    .pipe(rename({
      basename: 'main',
      suffix: '.min'
    }))
    .pipe(gulp.dest(paths.styles.dest));
}

function scripts() {
  return gulp.src(paths.scripts.src, { sourcemaps: true })
    .pipe(babel())
    .pipe(uglify())
    .pipe(concat('main.min.js'))
    .pipe(gulp.dest(paths.scripts.dest));
}

function watch() {
  gulp.watch(paths.scripts.src, scripts);
  gulp.watch(paths.styles.src, styles);
}

/*
 * You can use CommonJS `exports` module notation to declare tasks
 */
exports.clean = clean;
exports.styles = styles;
exports.scripts = scripts;
exports.watch = watch;

/*
 * Specify if tasks run in series or parallel using `gulp.series` and `gulp.parallel`
 */
var build = gulp.series(clean, gulp.parallel(styles, scripts));

/*
 * You can still use `gulp.task` to expose tasks
 */
gulp.task('build', build);

/*
 * Define default task that can be called by just running `gulp` from cli
 */
gulp.task('default', build);

Use latest JavaScript version in your gulpfile

Node already supports a lot of ES2015, to avoid compatibility problem we suggest to install Babel and rename your gulpfile.js as gulpfile.babel.js.

npm install --save-dev babel-register babel-preset-es2015

Then create a .babelrc file with the preset configuration.

{
  "presets": [ "es2015" ]
}

And here's the same sample from above written in ES2015.

import gulp from 'gulp';
import less from 'gulp-less';
import babel from 'gulp-babel';
import concat from 'gulp-concat';
import uglify from 'gulp-uglify';
import rename from 'gulp-rename';
import cleanCSS from 'gulp-clean-css';
import del from 'del';

const paths = {
  styles: {
    src: 'src/styles/**/*.less',
    dest: 'assets/styles/'
  },
  scripts: {
    src: 'src/scripts/**/*.js',
    dest: 'assets/scripts/'
  }
};

/*
 * For small tasks you can export arrow functions
 */
export const clean = () => del([ 'assets' ]);

/*
 * You can also declare named functions and export them as tasks
 */
export function styles() {
  return gulp.src(paths.styles.src)
    .pipe(less())
    .pipe(cleanCSS())
    // pass in options to the stream
    .pipe(rename({
      basename: 'main',
      suffix: '.min'
    }))
    .pipe(gulp.dest(paths.styles.dest));
}

export function scripts() {
  return gulp.src(paths.scripts.src, { sourcemaps: true })
    .pipe(babel())
    .pipe(uglify())
    .pipe(concat('main.min.js'))
    .pipe(gulp.dest(paths.scripts.dest));
}

 /*
  * You could even use `export as` to rename exported tasks
  */
function watchFiles() {
  gulp.watch(paths.scripts.src, scripts);
  gulp.watch(paths.styles.src, styles);
}
export { watchFiles as watch };

/*
 * You can still use `gulp.task`
 * for example to set task names that would otherwise be invalid
 */
const build = gulp.series(clean, gulp.parallel(styles, scripts));
gulp.task('build', build);

/*
 * Export a default task
 */
export default build;

Incremental Builds

You can filter out unchanged files between runs of a task using the gulp.src function's since option and gulp.lastRun:

const paths = {
  ...
  images: {
    src: 'src/images/**/*.{jpg,jpeg,png}',
    dest: 'build/img/'
  }
}

function images() {
  return gulp.src(paths.images.src, {since: gulp.lastRun(images)})
    .pipe(imagemin({optimizationLevel: 5}))
    .pipe(gulp.dest(paths.images.dest));
}

function watch() {
  gulp.watch(paths.images.src, images);
}

Task run times are saved in memory and are lost when gulp exits. It will only save time during the watch task when running the images task for a second time.

If you want to compare modification time between files instead, we recommend these plugins:

gulp-newer example:

function images() {
  var dest = 'build/img';
  return gulp.src(paths.images)
    .pipe(newer(dest))  // pass through newer images only
    .pipe(imagemin({optimizationLevel: 5}))
    .pipe(gulp.dest(dest));
}

If you can't simply filter out unchanged files, but need them in a later phase of the stream, we recommend these plugins:

gulp-remember example:

function scripts() {
  return gulp.src(scriptsGlob)
    .pipe(cache('scripts'))    // only pass through changed files
    .pipe(header('(function () {')) // do special things to the changed files...
    .pipe(footer('})();'))     // for example,
                               // add a simple module wrap to each file
    .pipe(remember('scripts')) // add back all files to the stream
    .pipe(concat('app.js'))    // do things that require all files
    .pipe(gulp.dest('public/'))
}

Want to contribute?

Anyone can help make this project better - check out our Contributing guide!

Backers

Support us with a monthly donation and help us continue our activities.

Backers

Sponsors

Become a sponsor to get your logo on our README on Github.

Sponsors

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - papers-we-love/papers-we-love: Papers from the computer science community to read and discuss.
Skip to content
Switch branches/tags
Nothing to show
Permalink
Failed to load latest commit information.
.github Fix broken link to ACM copyright link in CONTRIBUTING.md (#431) Feb 13, 2017
affective-computing Added Picard first paper on affective computing (#507) Feb 1, 2018
android added space after a md formatted link May 30, 2014
api_design Update to all READMEs for hosted content Oct 7, 2015
artificial_intelligence Update README.md Oct 30, 2017
audio_comp_sci Adding the Marsyas open source audio processing framework. (#492) Oct 26, 2017
biocomputing List 'A DNA-Based Archival Storage System' (#427) Nov 19, 2016
caching spartan distributed array framework / sqlcache (#465) Jul 9, 2017
clustering_algorithms Update README.md Nov 14, 2014
combinatory_logic Add Combinatorial Analysis and Computers (1965) (#422) Oct 30, 2016
comp_sci_fundamentals_and_history Add link to article by Marvin Minsky (#482) Oct 3, 2017
computational_creativity add for pwl-nyc april Mar 18, 2016
computer_architecture add papers referred to by @skamille Jul 18, 2014
computer_education A Framework for Automated Generation of Questions Across Formal Domains Oct 9, 2015
computer_graphics Update README.md Sep 3, 2017
computer_vision Update to all READMEs for hosted content Oct 7, 2015
concurrency Corrects typos in filenames (#479) Sep 5, 2017
crash_only Add crash-only software dir + articles May 31, 2015
cryptography Add paper on key reinstallation attacks (#484) Oct 18, 2017
data_compression Update to all READMEs for hosted content Oct 7, 2015
data_fusion kalman filter and category (#410) Aug 24, 2016
data_replication Add papers presented on SF chapter on Feb 23rd 2017 (#432) Feb 26, 2017
data_science Add Tidy Data (2014) to list of articles (#414) Aug 30, 2016
data_structures Fix markup for data_structures Nov 28, 2015
datastores Adding paper for spartan distributed array framework. (#449) May 7, 2017
design add No Silver Bullet to readme Jan 31, 2016
digital_currency Update to all READMEs for hosted content Oct 7, 2015
distributed_systems Corrects typos in filenames (#479) Sep 5, 2017
economics Adding the simple economics of open source paper (#429) Dec 12, 2016
ethics Update to all READMEs for hosted content Oct 7, 2015
experimental_algorithmics Update to all READMEs for hosted content Oct 7, 2015
gamification Update to all READMEs for hosted content Oct 7, 2015
garbage_collection Add papers presented on SF chapter on Feb 23rd 2017 (#432) Feb 26, 2017
gossip Replace ps link with a pdf link. (#436) Mar 28, 2017
information_retrieval Corrects typos in filenames (#479) Sep 5, 2017
information_theory Update to all READMEs for hosted content Oct 7, 2015
languages adds Composing Fractals to Haskell (#488) Oct 24, 2017
logic_and_programming spelling error in logic_and_programming readme Feb 9, 2016
machine_learning Multiple Narrative Disentanglement: Unraveling Infinite Jest (#504) Jan 20, 2018
macros Update to all READMEs for hosted content Oct 7, 2015
mathematics Creating mathematics Folder and adding transcendence of pi paper (#473) Jul 31, 2017
memory_management Fixing readme entry in memory management (#416) Sep 18, 2016
networks Added paper on datacenter traffic control review (#508) Feb 2, 2018
non_blocking_algorithms Cryptography, non-blocking algorithm, quantum computing (#409) Aug 18, 2016
operating_systems Adding kvm paper; sub-sections in operations_systems (#452) May 15, 2017
organizational_simulation next paper nyc Apr 21, 2016
paradigms add purely functional data structures to paradigms readme (#485) Oct 19, 2017
pattern_matching Update to all READMEs for hosted content Oct 7, 2015
physics add paper for presentation 11/19 nyc pwl Oct 20, 2015
plt Fixed typos Apr 14, 2016
processes Fix typo Feb 19, 2016
program_verification add epitaxis (#421) Oct 4, 2016
quantum_computing Fix broken link in Quantum Computing (#470) Jul 22, 2017
robotics Update README.md Feb 25, 2016
security Add Meltdown and Spectre papers (#506) Jan 30, 2018
speech_recognition Added tutorial link back in with new URL as provided by @DarrenN Jan 26, 2015
sports_analytics Update to all READMEs for hosted content Oct 7, 2015
streaming_algorithms Created Streaming Algorithms folder (#434) Mar 27, 2017
stringology add "Fast String Searching" Mar 6, 2015
sublinear_algorithms Update to all READMEs for hosted content Oct 7, 2015
systematic_review create folder and add paper systematic_review (#433) Apr 24, 2017
testing fix: links to existing paper (#503) Jan 12, 2018
time_series Time-series new paper: ASAP (#446) May 1, 2017
user_interfaces Adding projectional editor paper, presented in Seattle papers we love… Jun 1, 2017
virtual_machines fastcommit Jul 6, 2015
.gitignore primecoin Nov 30, 2013
CODE_OF_CONDUCT.md Update CoC contacts May 9, 2017
README.md Add Atlanta to the PWL chapter list (#509) Feb 20, 2018
nautilus.db nautilus.db from branch nautilus-1517621103.135262 Feb 3, 2018

README.md

Papers We Love

Papers We Love (PWL) is a community built around reading, discussing and learning more about academic computer science papers. This repository serves as a directory of some of the best papers the community can find, bringing together documents scattered across the web. You can also visit the Papers We Love site for more info.

Due to licenses we cannot always host the papers themselves (when we do, you will see a 📜 emoji next to its title in the directory README) but we can provide links to their locations.

If you enjoy the papers, perhaps stop by a local chapter meetup and join in on the vibrant discussions around them. You can also discuss PWL events, the content in this repository, and/or anything related to PWL on our Slack, after signing-up to join it, or on our #paperswelove IRC channel on freenode.

Chapters

Here are our official chapters. Let us know if you are interested in starting one in your city!

All of our meetups follow our Code of Conduct.

Past Presentations

Check out our Youtube and MixCloud (audio-only format) channels.

Info

We're looking for pull requests related to papers we should add, better organization of the papers we do have, and/or links to other paper-repos we should point to.

Other Good Places to Find Papers

Please check out our wiki-page for links to blogs, books, exchanges that are worth a good read.

How To Read a Paper

Reading a paper is not the same as reading a blogpost or a novel. Here are a few handy resources to help you get started.

Applications/Ideas built around Papers We Love

Contributing Guidelines

Please take a look at our CONTRIBUTING.md file.

Copyright

The name "Papers We Love" and the logos for the organization are copyrighted, and under the ownership of Papers We Love Ltd, all rights reserved. When starting a chapter, please review our guidelines and ask us about using the logo.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - adobe/brackets: An open source code editor for the web, written in JavaScript, HTML and CSS.
Skip to content
An open source code editor for the web, written in JavaScript, HTML and CSS.
JavaScript HTML CSS PHP Shell Ruby
Switch branches/tags
Latest commit 51a5908 Feb 20, 2018
nethip Merge pull request #13256 from duplicates/issue-13099
Fix #13099: Disallow user to create files/folder using relative path
Permalink
Failed to load latest commit information.
samples Add Korean version "Getting Started" (#13846) Nov 20, 2017
src Merge branch 'master' of https://github.com/duplicates/brackets into … Feb 8, 2018
tasks Stopping from minifying node code in JSUtils Dec 11, 2017
test Merge branch 'master' of https://github.com/duplicates/brackets into … Feb 8, 2018
tools Added brackets around root_path in the mkdir directive of setup_for_h… Feb 11, 2014
.brackets.json Revert "Ensures fold-gutter is always inserted after the line-number … Aug 28, 2016
.eslintignore download eslint package from npm and place it into default extensions ( Aug 31, 2017
.eslintrc.js Enable no-redeclare to eslint (#13452) Jun 18, 2017
.gitattributes Normalized Line Endings and added .gitattributes Feb 2, 2013
.gitignore Git ignore package-lock.json (#13827) Nov 9, 2017
.gitmodules Move npm dependencies inside src and add CodeMirror to them Dec 7, 2016
.npmrc Git ignore package-lock.json (#13827) Nov 9, 2017
.travis.yml Travis: test against node 6 Sep 5, 2016
CODE_OF_CONDUCT.md Add a Code of Conduct Sep 4, 2016
CONTRIBUTING.md Update 'Extension Ideas' query link so it shows both open & closed is… Aug 7, 2014
Gruntfile.js Stopping from minifying node code in JSUtils Dec 11, 2017
ISSUE_TEMPLATE.md Update ISSUE_TEMPLATE.md to cover platform differences (#12866) Nov 1, 2016
LICENSE Make license year evergreen Jan 27, 2016
NOTICE Fixed a copy / paste bug. Oct 6, 2014
README.md Update README.md to reflect Linux updates Sep 26, 2017
build.json Brackets 1.11 pre-release 2nd build commit with bug fixes Sep 12, 2017
npm-shrinkwrap.json download eslint package from npm and place it into default extensions ( Aug 31, 2017
package.json Version bump to 1.13 Jan 27, 2018

README.md

Welcome to Brackets! Build Status

Brackets is a modern open-source code editor for HTML, CSS and JavaScript that's built in HTML, CSS and JavaScript.

What makes Brackets different from other web code editors?

  • Tools shouldn't get in your way. Instead of cluttering up your coding environment with lots of panels and icons, the Quick Edit UI in Brackets puts context-specific code and tools inline.
  • Brackets is in sync with your browser. With Live Preview, Brackets works directly with your browser to push code edits instantly and jump back and forth between your real source code and the browser view.
  • Do it yourself. Because Brackets is open source, and built with HTML, CSS and JavaScript, you can help build the best code editor for the web.

Brackets may have reached version 1, but we're not stopping there. We have many feature ideas on our trello board that we're anxious to add and other innovative web development workflows that we're planning to build into Brackets. So take Brackets out for a spin and let us know how we can make it your favorite editor.

You can see some screenshots of Brackets on the wiki, intro videos on YouTube, and news on the Brackets blog.

How to install and run Brackets

Download

Installers for the latest stable build for Mac, Windows and Linux (Debian/Ubuntu) can be downloaded here.

Usage

By default, Brackets opens a folder containing some simple "Getting Started" content. You can choose a different folder to edit using File > Open Folder.

Most of Brackets should be pretty self-explanatory, but for information on how to use its unique features, like Quick Edit and Live Preview, please read How to Use Brackets. Also, see the release notes for a list of new features and known issues in each build.

In addition to the core features built into Brackets, there is a large and growing community of developers building extensions that add all sorts of useful functionality. See the Brackets Extension Registry for a list of available extensions. For installation instructions, see the extensions wiki page.

Need help?

Having problems starting Brackets the first time, or not sure how to use Brackets? Please review Troubleshooting, which helps you to fix common problems and find extra help if needed.

Helping Brackets

I found a bug!

If you found a repeatable bug, and troubleshooting tips didn't help, then be sure to search existing issues first. Include steps to consistently reproduce the problem, actual vs. expected results, screenshots, and your OS and Brackets version number. Disable all extensions to verify the issue is a core Brackets bug. Read more guidelines for filing good bugs.

I have a new suggestion, but don't know how to program!

For feature requests please first check our Trello board to see if it's already there; you can upvote it if so. If not, feel free to file it as an issue as above; we'll move it to the feature backlog for you.

I want to help with the code!

Awesome! There are lots of ways you can help. First read CONTRIBUTING.md, then learn how to pull the repo and hack on Brackets.

The text editor inside Brackets is based on CodeMirror—thanks to Marijn for taking our pull requests, implementing feature requests and fixing bugs! See Notes on CodeMirror for info on how we're using CodeMirror.

Although Brackets is built in HTML/CSS/JS, it currently runs as a desktop application in a thin native shell, so that it can access your local files. (If you just try to open the index.html file in a browser, it won't work yet.) The native shell for Brackets lives in a separate repo, adobe/brackets-shell.

I want to keep track of how Brackets is doing!

Not sure you needed the exclamation point there, but we like your enthusiasm.

What's Brackets working on next?

Contact info


Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - Homebrew/legacy-homebrew: The former home of Homebrew/homebrew (deprecated)
Skip to content
This repository has been archived by the owner. It is now read-only.
💀 The former home of Homebrew/homebrew (deprecated)
Ruby HTML Shell
Switch branches/tags
Nothing to show
Latest commit 5a9e19f Oct 9, 2016
kefir500 authored and MikeMcQuaid committed Oct 9, 2016 Fix documentation links (#50695)

README.md

Homebrew (Legacy)

This repository has been deprecated and split into two repositories:

Please note: you don't need to move pull requests or issues over from this. We will handle all migrations.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - wasabeef/awesome-android-ui: A curated list of awesome Android UI/UX libraries
Skip to content
A curated list of awesome Android UI/UX libraries
Switch branches/tags
Nothing to show
Latest commit 45f300f Jul 11, 2017 1
wasabeef committed Jul 11, 2017 add RichPath by @tarek360
Permalink
Failed to load latest commit information.
art add RichPath by @tarek360 Jul 11, 2017
pages add RichPath by @tarek360 Jul 11, 2017
.gitignore ༼ つ ◕_◕ ༽つ Give me your Pull Request Sep 4, 2015
README.md add RichPath by @tarek360 Jul 11, 2017

README.md

List of Android UI/UX Libraries

Awesome

A curated list of awesome Android UI/UX libraries.

Other lists

Maintainers

wasabeef wasabeef
ogaclejapan ogaclejapan

Index (light-weight pages)

Material

Name License Demo
MaterialDesignLibrary Apache License V2
DrawerArrowDrawable Apache License V2
MaterialTabs Apache License V2
PagerSlidingTabStrip Apache License V2
material-ripple Apache License V2
RippleEffect MIT
LDrawer Apache License V2
material-design-icons Apache License V2
AndroidMaterialDesignToolbar UnKnown
MaterialEditText Apache License V2
material-menu Apache License V2
material-dialogs Apache License V2
AlertDialogPro Apache License V2
MaterialNavigationDrawer Apache License V2
MaterialDialog Apache License V2
materialish-progress Apache License V2
FloatingActionButton MIT
android-floating-action-button Apache License V2
MaterialSheetFab MIT
snackbar MIT
CircularReveal Apache License V2
material-range-bar Apache License V2
Lollipop-AppCompat-Widgets-Skeleton Apache License V2
Carbon Apache License V2 NONE
material-calendarview Apache License V2
Material Apache License V2
Material Icon Library Apache License V2
FAB-Loading Apache License V2
MaterialTextField Apache License V2
MaterialDateRangePicker Apache License V2
TapTargetView Apache License V2
Spotlight Apache License V2
MaterialTapTargetPrompt Apache License V2
MaterialShadows MIT <img src="/art/MaterialShadows.png" いwidth="100%">

Layout

Name License Demo
WaveView Apache License V2
ResideLayout Apache License V2
AndroidSwipeLayout MIT
SwipeBackLayout Apache License V2
Maskable Layout Apache License V2
ExpandableLayout MIT
android-PullRefreshLayout MIT
TileView MIT
ShowcaseView Apache License V2
Ultra Pull To Refresh Apache License V2
AndroidViewHover UnKnown
DraggablePanel Apache License V2
Slidr Apache License V2
Phoenix Pull-to-Refresh Apache License V2
Pull-to-Refresh.Tours Apache License V2
InboxLayout UnKnown
SwipeBack UnKnown
ArcLayout Apache License V2
Dragger Apache License V2
PhysicsLayout Apache License V2
BottomSheet License
Bubbles for Android Apache License V2
AndroidSlidingUpPanel Apache License V2
android-transition Apache License V2
CircleRefreshLayout MIT
WaveSwipeRefreshLayout Apache License V2
FloatingView Apache License V2
FrenchToast Apache License V2
AndroidSweetSheet Apache License V2
FABRevealLayout Apache License V2
ToggleExpandLayout MIT
FlowingDrawer Apache License V2
WaveView Apache License V2
FoldableLayout Apache License V2
TriangleLabelView Apache License V2
FlexboxLayout Apache License V2
Vorolay Apache License V2
Hover MIT

Button

Name License Demo
circular-progress-button Apache License V2
android-process-button Apache License V2
android-circlebutton Apache License V2
android-flat-button Apache License V2
MovingButton MIT
LabelView Apache License V2

List / Grid

Name License Demo
SuperRecyclerView Apache License V2 NONE
RecyclerViewSwipeDismiss UnKnown
FlabbyListView Apache License V2
recyclerview-stickyheaders MIT
ParallaxListView UnKnown
PullZoomView Apache License V2
SwipeMenuListView MIT
discrollview Apache License V2
StickyListHeaders Apache License V2
ListBuddies Apache License V2 <img src="/art/ListBuddies.png" width="49%"/ > <img src="/art/ListBuddies.gif" width="49%"/ >
Android-ObservableScrollView Apache License V2
AsymmetricGridView Apache License V2
DynamicGrid MIT
AndroidStaggeredGrid Apache License V2
SwipeListView Apache License V2
android-parallax-recyclerview Apache License V2
BlurStickyHeaderListView MIT
RecyclerView Animators Apache License V2
RecyclerView-FlexibleDivider Apache License V2
AndroidTreeView Apache License V2
RecyclerViewFastScroller Apache License V2
RecyclerView-MultipleViewTypesAdapter Apache License V2
SwipeToAction Apache License V2
Advanced Recyclerview Apache License V2
RecyclerItemDecoration Apache License V2
MaterialRecents Apache License V2
Dividers Apache License V2
Drag Select Recycler View MIT
sticky-headers-recyclerview Apache License V2

ViewPager

Name License Demo
ParallaxPagerTransformer UnKnown
ViewPagerTransforms Apache License V2
CircleIndicator MIT
Android ViewPagerIndicator Apache License V2
Android-ParallaxHeaderViewPager Apache License V2
freepager Apache License V2
SpringIndicator Apache License V2
SmartTabLayout Apache License V2
FlipViewPager.Draco Apache License V2
MaterialViewPager Apache License V2
AndroidRubberIndicator MIT
HollyViewPager Apache License V2
SCViewPager Apache License V2
SwipeSelector Apache License V2
NavigationTabStrip Apache License V2 & MIT
NavigationTabBar Apache License V2 & MIT
UltraViewPager MIT

Label / Form

Name License Demo
Shimmer-android Apache License V2
Shimmer for Android BSD 2 License
Titanic Apache License V2
MatchView Apache License V2
android-autofittextview Apache License V2
SecretTextView UnKnown
TextJustify-Android Apache License V2
RoundedLetterView Apache License V2
TextDrawable Apache License V2
BabushkaText Apache License V2
ExpandableTextView Apache License V2
Float Labeled EditText Apache License V2
SizeAdjustingTextView GNU License NONE
ParkedTextView MIT
Material Code input Apache License V2

TextSurface Apache License V2
EmailAutoCompleteTextView Apache License V2
Tab Digit Apache License V2
RotatingText MIT

Image

Name License Demo
TouchImageView LICENSE NONE
CircleImageView Apache License V2
android-shape-imageview Apache License V2
GifImageView MIT
cropper Apache License V2
android-crop Apache License V2
SelectableRoundedImageView Apache License V2
RoundedImageView Apache License V2
CropImageView Apache License V2
BitmapMerger MIT
Scrolling Image View NONE
Pixelate Android MIT
SimpleCropView MIT
android-anyshape MIT
PanoramaImageView MIT

SeekBar

Name License Demo
DiscreteSeekBar Apache License V2
SeekBarCompat Apache License V2
PreviewSeekBar Apache License V2

Progress

Name License Demo
SmoothProgressBar Apache License V2
NumberProgressBar MIT
CircleProgress UnKnown
android-square-progressbar UnKnown
GoogleProgressBar Apache License V2
Android-RoundCornerProgressBar Apache License V2
ElasticDownload Apache License V2
FABProgressCircle Apache License V2
Loading Apache License V2
Animated Circle Loading View Apache License V2
AndroidFillableLoaders Apache License V2
spots-dialog MIT
AVLoadingIndicatorView Apache License V2
LoadingDots MIT
ColorArcProgerssBar Apache License V2
ArcProgressStackView Apache License V2
WaveLoadingView Apache License V2
CatLoadingView MIT
WaveLoading MIT

Menu

Name License Demo
CircularFloatingActionMenu MIT
AndroidResideMenu MIT
Folder-ResideMenu Apache License V2
Side-Menu.Android Apache License V2
Context-Menu.Android Apache License V2
GuillotineMenu-Android Apache License V2
android-snake-menu Apache License V2
BoomMenu Apache License V2

ActionBar

Name License Demo
FadingActionBar Apache License V2
GlassActionBar Apache License V2
NotBoringActionBar Apache License V2

Dialog

Name License Demo
DialogPlus Apache License V2
Sweet Alert MIT
FlycoDialog-Matser MIT

Calendar

Name License Demo
Caldroid MIT
android-times-square Apache License V2
Android-MonthCalendarWidget Apache License V2
android-betterpickers Apache License V2
Android-Week-View Apache License V2
SilkCal MIT
SublimePicker Apache License V2
MaterialDateTimePicker Apache License V2
CompactCalendarView MIT

Graph

Name License Demo
EazeGraph Apache License V2
GraphView Apache License V2
hellocharts-android Apache License V2
MPAndroidChart Apache License V2
WilliamChart Apache License V2

Animation

Name License Demo
AndroidViewAnimations MIT
ListViewAnimations Apache License V2
AndroidImageSlider MIT
transitions-everywhere Apache License V2
Android Ripple Background MIT
android-flip MIT
FragmentTransactionExtended Apache License V2
KenBurnsView Apache License V2
rebound BSD 2 License http://facebook.github.io/rebound/
Reachability Apache License V2
AnimationEasingFunctions MIT
EasyAndroidAnimations UnKnown
android-pathview Apache License V2
ViewRevealAnimator Apache License V2
ArcAnimator MIT
SearchMenuAnim UnKnown
Cross View Apache License V2
WoWoViewPager Apache License V2
Lottie for Android Apache License V2
RichPath Apache License V2

Parallax

Name License Demo
ParallaxEverywhere MIT

Effect

Name License Demo
EtsyBlur Apache License V2
BlurDialogFragment Apache License V2
BlurBehind MIT
Android StackBlur Apache License V2
EdgeEffectOverride Apache License V2
ExplosionField Apache License V2
BrokenView MIT
Trianglify Apache License V2
ShineButton MIT

Other

Name License Demo
Swipecards Apache License V2
Android-Bootstrap MIT
Android PDFView GPL V3
Dspec Apache License V2
LolliPin Apache License V2
DrawableView Apache License V2
Material Shadow 9-Patch Apache License V2
SimpleFingerGestures Apache License v2
Decor Apache License V2
Voice Recording Visualizer Apache License V2 IMAGE demo
EasyFonts Apache License V2
Android Sliding Activity Library Apache License V2
Snake View Apache License V2
Rotatable MIT
StatusBarUtil Apache License V2
Horizon - Simple visual equaliser for Android Apache License V2
Stepper Touch Apache License V2
Konfetti ISC
You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - tensorflow/models: Models and examples built with TensorFlow
Skip to content
Models and examples built with TensorFlow
Python Jupyter Notebook C++ HTML Shell JavaScript Other
Latest commit d6d0868 Feb 22, 2018

README.md

TensorFlow Models

This repository contains a number of different models implemented in TensorFlow:

The official models are a collection of example models that use TensorFlow's high-level APIs. They are intended to be well-maintained, tested, and kept up to date with the latest stable TensorFlow API. They should also be reasonably optimized for fast performance while still being easy to read. We especially recommend newer TensorFlow users to start here.

The research models are a large collection of models implemented in TensorFlow by researchers. They are not officially supported or available in release branches; it is up to the individual researchers to maintain the models and/or provide support on issues and pull requests.

The samples folder contains code snippets and smaller models that demonstrate features of TensorFlow, including code presented in various blog posts.

The tutorials folder is a collection of models described in the TensorFlow tutorials.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - ansible/ansible: Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.
Skip to content
Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.
Python PowerShell Shell Makefile Tcl Go
Switch branches/tags
v2.5.0b2 v2.5.0b1 v2.5.0a1 v2.4.4-0.1.beta1 v2.4.3.0-1 v2.4.3.0-0.6.rc3 v2.4.3.0-0.5.rc2 v2.4.3.0-0.4.rc1 v2.4.3.0-0.2.beta2 v2.4.3.0-0.1.beta1 v2.4.3-0.3.beta3 v2.4.2.0-1 v2.4.2.0-0.5.rc1 v2.4.2.0-0.4.beta4 v2.4.2.0-0.3.beta3 v2.4.2.0-0.2.beta2 v2.4.2.0-0.1.beta1 v2.4.1.0-1 v2.4.1.0-0.4.rc2 v2.4.1.0-0.3.rc1 v2.4.1.0-0.2.beta2 v2.4.1.0-0.1.beta1 v2.4.0.0-1 v2.4.0.0-0.5.rc5 v2.4.0.0-0.4.rc4 v2.4.0.0-0.3.rc3 v2.4.0.0-0.2.rc2 v2.4.0.0-0.1.rc1 v2.3.3.0-1 v2.3.3.0-0.3.rc3 v2.3.3.0-0.2.rc2 v2.3.3.0-0.1.rc1 v2.3.2.0-1 v2.3.2.0-0.5.rc5 v2.3.2.0-0.4.rc4 v2.3.2.0-0.3.rc3 v2.3.2.0-0.2.rc2 v2.3.2.0-0.1.rc1 v2.3.1.0-1 v2.3.1.0-0.2.rc2 v2.3.1.0-0.1.rc1 v2.3.0.0-1 v2.3.0.0-0.6.rc6 v2.3.0.0-0.5.rc5 v2.3.0.0-0.4.rc4 v2.3.0.0-0.3.rc3 v2.3.0.0-0.2.rc2 v2.3.0.0-0.1.rc1 v2.2.3.0-1 v2.2.3.0-0.1.rc1 v2.2.2.0-1 v2.2.2.0-0.2.rc2 v2.2.2.0-0.1.rc1 v2.2.1.0-1 v2.2.1.0-0.5.rc5 v2.2.1.0-0.4.rc4 v2.2.1.0-0.3.rc3 v2.2.1.0-0.2.rc2 v2.2.1.0-0.1.rc1 v2.2.0.0-1 v2.2.0.0-0.4.rc4 v2.2.0.0-0.3.rc3 v2.2.0.0-0.2.rc2 v2.2.0.0-0.1.rc1 v2.1.6.0-1 v2.1.6.0-0.1.rc1 v2.1.5.0-1 v2.1.5.0-0.2.rc2 v2.1.5.0-0.1.rc1 v2.1.4.0-1 v2.1.4.0-0.3.rc3 v2.1.4.0-0.2.rc2 v2.1.4.0-0.1.rc1 v2.1.3.0-1 v2.1.3.0-0.3.rc3 v2.1.3.0-0.2.rc2 v2.1.3.0-0.1.rc1 v2.1.2.0-1 v2.1.2.0-0.5.rc5 v2.1.2.0-0.4.rc4 v2.1.2.0-0.3.rc3 v2.1.2.0-0.2.rc2 v2.1.2.0-0.1.rc1 v2.1.1.0-1 v2.1.1.0-0.5.rc5 v2.1.1.0-0.4.rc4 v2.1.1.0-0.3.rc3 v2.1.1.0-0.2.rc2 v2.1.1.0-0.1.rc1 v2.1.0.0-1 v2.1.0.0-0.4.rc4 v2.1.0.0-0.3.rc3 v2.1.0.0-0.2.rc2 v2.1.0.0-0.1.rc1 v2.0.2.0-1 v2.0.2.0-0.4.rc4 v2.0.2.0-0.3.rc3 v2.0.2.0-0.2.rc2 v2.0.2.0-0.1.rc1 v2.0.1.0-1
Nothing to show
Latest commit 73fd593 Feb 22, 2018
s-hertel aws_ec2 inv plugin: remove extra call to verify_file (#36588)
* Remove extra call to verify_file

* Allow next inventory plugin to be tried if the file isn't verified
Permalink
Failed to load latest commit information.
.github Notify cyberark-bizdev for cyberark plugin and module tickets. Feb 21, 2018
bin Normalize usage of temp and tmp on tmp (#36221) Feb 15, 2018
contrib Add a module_utils OpenStack Cloud constructor (#20974) Feb 15, 2018
docs ACI: Various changes to module documentation and guide (#36516) Feb 21, 2018
examples Implement plugin filtering Jan 23, 2018
hacking Add new aws_waf_condition module (#33110) Feb 1, 2018
lib/ansible aws_ec2 inv plugin: remove extra call to verify_file (#36588) Feb 22, 2018
licenses Create a short license for PSF and MIT. (#32212) Nov 6, 2017
packaging Use pycrypto backend, rather than python-cryptography, on Ubuntu Precise Feb 19, 2018
test Update more code-smell tests. (#36570) Feb 22, 2018
ticket_stubs add bug_internal_api.md to ticket_stubs (#34370) Jan 3, 2018
.coveragerc Docker image updates for integration tests. (#26054) Jun 23, 2017
.gitattributes avoid exporting files useless to dist Jun 23, 2017
.gitignore Followup to docs refactor pull request #36067 - fixes gitignore and c… ( Feb 13, 2018
.gitmodules Code cleanup. Dec 8, 2016
.mailmap Fix syntax typo Dec 24, 2017
.yamllint Add module support to yamllint sanity test. (#34964) Jan 16, 2018
CHANGELOG.md now get_url defaults to module temp dir (#36218) Feb 20, 2018
CODING_GUIDELINES.md english corrections (#35307) Jan 30, 2018
CONTRIBUTING.md Update CONTRIBUTING.md to point to the right stuff (#32258) Oct 27, 2017
COPYING license file should be in source tree Mar 16, 2012
MANIFEST.in Include licenses in the tarball (#35855) Feb 7, 2018
MODULE_GUIDELINES.md Moving guidelines to the official docs (#32260) Oct 27, 2017
Makefile add manpage install target Feb 7, 2018
README.md Update README.md (#35241) Jan 24, 2018
RELEASES.txt Add 2.4.3 to releases.txt Jan 31, 2018
ROADMAP.rst No hardcoding roadmaps (#32981) Nov 16, 2017
VERSION Update VERSION to match ansible.release (#36212) Feb 15, 2018
ansible-core-sitemap.xml Remove remnants of obsolete fireball mode. Dec 9, 2016
docsite_requirements.txt Fixes the build issue pertaining to sphinx-build which is required to… Mar 14, 2017
requirements.txt Cyptography pr 20566 rebase (#25560) Jun 27, 2017
setup.py set the zip_safe flag to False (#32194) Oct 27, 2017
shippable.yml Rebalance cloud tests into 5 groups. Feb 10, 2018
tox.ini Convert ansible-test compile into a sanity test. Jan 25, 2018

README.md

PyPI version Build Status

Ansible

Ansible is a radically simple IT automation system. It handles configuration-management, application deployment, cloud provisioning, ad-hoc task-execution, and multinode orchestration - including trivializing things like zero-downtime rolling updates with load balancers.

Read the documentation and more at https://ansible.com/

You can find installation instructions here for a variety of platforms. Most users should probably install a released version of Ansible from pip, a package manager or our release repository. Officially supported builds of Ansible are also available. Some power users run directly from the development branch - while significant efforts are made to ensure that devel is reasonably stable, you're more likely to encounter breaking changes when running Ansible this way.

Design Principles

  • Have a dead simple setup process and a minimal learning curve
  • Manage machines very quickly and in parallel
  • Avoid custom-agents and additional open ports, be agentless by leveraging the existing SSH daemon
  • Describe infrastructure in a language that is both machine and human friendly
  • Focus on security and easy auditability/review/rewriting of content
  • Manage new remote machines instantly, without bootstrapping any software
  • Allow module development in any dynamic language, not just Python
  • Be usable as non-root
  • Be the easiest IT automation system to use, ever.

Get Involved

  • Read Community Information for all kinds of ways to contribute to and interact with the project, including mailing list information and how to submit bug reports and code to Ansible.
  • All code submissions are done through pull requests. Take care to make sure no merge commits are in the submission, and use git rebase vs git merge for this reason. If submitting a large code change (other than modules), it's probably a good idea to join ansible-devel and talk about what you would like to do or add first and to avoid duplicate efforts. This not only helps everyone know what's going on, it also helps save time and effort if we decide some changes are needed.
  • Users list: ansible-project
  • Development list: ansible-devel
  • Announcement list: ansible-announce - read only
  • irc.freenode.net: #ansible

Branch Info

  • Releases are named after Led Zeppelin songs. (Releases prior to 2.0 were named after Van Halen songs.)
  • The devel branch corresponds to the release actively under development.
  • Various release-X.Y branches exist for previous releases.
  • We'd love to have your contributions, read Community Information for notes on how to get started.

Authors

Ansible was created by Michael DeHaan (michael.dehaan/gmail/com) and has contributions from over 1000 users (and growing). Thanks everyone!

Ansible is sponsored by Ansible, Inc

License

GNU General Public License v3.0

See COPYING to see the full text.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - ReactTraining/react-router: Declarative routing for React
Skip to content
Declarative routing for React
JavaScript Objective-C CSS Other
Latest commit e5d8c66 Feb 22, 2018

README.md

react-router

React Router

Declarative routing for React

Docs

View the docs here

Migrating from 2.x/3.x?

3.x docs

2.x docs

Packages

This repository is a monorepo that we manage using Lerna. That means that we actually publish several packages to npm from the same codebase, including:

Package Version Docs Description
react-router npm The core of React Router
react-router-dom npm DOM bindings for React Router
react-router-native npm React Native bindings for React Router
react-router-redux npm Integration with React Router and Redux
react-router-config npm Static route config helpers

About

react-router is developed and maintained by React Training and many amazing contributors. If you're interested in learning more about what React can do for your company, please get in touch!

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - blueimp/jQuery-File-Upload: File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.
Skip to content
File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.
JavaScript HTML PHP Go Python CSS
Latest commit e6f0590 Feb 19, 2018

README.md

jQuery File Upload Plugin

Demo

Demo File Upload

Description

File Upload widget with multiple file selection, drag&drop support, progress bars, validation and preview images, audio and video for jQuery.
Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.

Setup

Features

  • Multiple file upload:
    Allows to select multiple files at once and upload them simultaneously.
  • Drag & Drop support:
    Allows to upload files by dragging them from your desktop or filemanager and dropping them on your browser window.
  • Upload progress bar:
    Shows a progress bar indicating the upload progress for individual files and for all uploads combined.
  • Cancelable uploads:
    Individual file uploads can be canceled to stop the upload progress.
  • Resumable uploads:
    Aborted uploads can be resumed with browsers supporting the Blob API.
  • Chunked uploads:
    Large files can be uploaded in smaller chunks with browsers supporting the Blob API.
  • Client-side image resizing:
    Images can be automatically resized on client-side with browsers supporting the required JS APIs.
  • Preview images, audio and video:
    A preview of image, audio and video files can be displayed before uploading with browsers supporting the required APIs.
  • No browser plugins (e.g. Adobe Flash) required:
    The implementation is based on open standards like HTML5 and JavaScript and requires no additional browser plugins.
  • Graceful fallback for legacy browsers:
    Uploads files via XMLHttpRequests if supported and uses iframes as fallback for legacy browsers.
  • HTML file upload form fallback:
    Allows progressive enhancement by using a standard HTML file upload form as widget element.
  • Cross-site file uploads:
    Supports uploading files to a different domain with cross-site XMLHttpRequests or iframe redirects.
  • Multiple plugin instances:
    Allows to use multiple plugin instances on the same webpage.
  • Customizable and extensible:
    Provides an API to set individual options and define callback methods for various upload events.
  • Multipart and file contents stream uploads:
    Files can be uploaded as standard "multipart/form-data" or file contents stream (HTTP PUT file upload).
  • Compatible with any server-side application platform:
    Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.

Requirements

Mandatory requirements

Optional requirements

The user interface of all versions, except the jQuery UI version, is built with Bootstrap and icons from Glyphicons.

Cross-domain requirements

Cross-domain File Uploads using the Iframe Transport plugin require a redirect back to the origin server to retrieve the upload results. The example implementation makes use of result.html as a static redirect page for the origin server.

The repository also includes the jQuery XDomainRequest Transport plugin, which enables limited cross-domain AJAX requests in Microsoft Internet Explorer 8 and 9 (IE 10 supports cross-domain XHR requests).
The XDomainRequest object allows GET and POST requests only and doesn't support file uploads. It is used on the Demo to delete uploaded files from the cross-domain demo file upload service.

Custom Backends

You can add support for various backends by adhering to the specification outlined here.

Browsers

Desktop browsers

The File Upload plugin is regularly tested with the latest browser versions and supports the following minimal versions:

  • Google Chrome
  • Apple Safari 4.0+
  • Mozilla Firefox 3.0+
  • Opera 11.0+
  • Microsoft Internet Explorer 6.0+

Mobile browsers

The File Upload plugin has been tested with and supports the following mobile browsers:

  • Apple Safari on iOS 6.0+
  • Google Chrome on iOS 6.0+
  • Google Chrome on Android 4.0+
  • Default Browser on Android 2.3+
  • Opera Mobile 12.0+

Supported features

For a detailed overview of the features supported by each browser version, please have a look at the Extended browser support information.

Contributing

Bug fixes and new features can be proposed using pull requests. Please read the contribution guidelines before submitting a pull request.

Support

This project is actively maintained, but there is no official support channel.
If you have a question that another developer might help you with, please post to Stack Overflow and tag your question with blueimp jquery file upload.

License

Released under the MIT license.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - justjavac/free-programming-books-zh_CN: 免费的计算机编程类中文书籍,欢迎投稿
Skip to content
JavaScript
Switch branches/tags
Nothing to show
Latest commit f0aef11 Jan 24, 2018
justjavac committed Jan 24, 2018 Merge pull request #611 from dofy/master
add vim 实操教程

README.md

免费的编程中文书籍索引

免费的编程中文书籍索引,欢迎投稿。

欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅:

justjavac微信公众帐号

参与交流

欢迎大家将珍藏已久的经典免费书籍共享出来,您可以:

  • 使用 Issues 以及 Pull Request

贡献者名单: https://github.com/justjavac/free-programming-books-zh_CN/graphs/contributors

目录

语言无关类

操作系统

智能系统

分布式系统

编译原理

函数式概念

计算机图形学

WEB服务器

版本控制

编辑器

NoSQL

PostgreSQL

MySQL

管理和监控

项目相关

设计模式

Web

大数据

编程艺术

其它

语言相关类

Android

APP

AWK

C/C++

C#

Clojure

CSS/HTML

Dart

Elixir

Erlang

Fortran

Go

Groovy

Haskell

iOS

Java

JavaScript

LaTeX

LISP

Lua

OCaml

Perl

PHP

Prolog

Python

R

Ruby

Rust

Scala

Shell

Swift

读书笔记及其它

测试相关

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software
Skip to content
A curated list of awesome Go frameworks, libraries and software
Go
Switch branches/tags
Nothing to show

README.md

Awesome Go

Build Status Awesome Slack Widget

A curated list of awesome Go frameworks, libraries and software. Inspired by awesome-python.

Contributing

Please take a quick gander at the contribution guidelines first. Thanks to all contributors; you rock!

If you see a package or project here that is no longer maintained or is not a good fit, please submit a pull request to improve this file. Thank you!

Contents

Audio and Music

Libraries for manipulating audio.

  • flac - Native Go FLAC decoder.
  • flac - Native Go FLAC decoder.
  • gaad - Native Go AAC bitstream parser.
  • go-sox - libsox bindings for go.
  • go_mediainfo - libmediainfo bindings for go.
  • gosamplerate - libsamplerate bindings for go.
  • id3v2 - Fast and stable ID3 parsing and writing library for Go.
  • malgo - Mini audio library.
  • minimp3 - Lightweight MP3 decoder library.
  • mix - Sequence-based Go-native audio mixer for music apps.
  • mp3 - Native Go MP3 decoder.
  • music-theory - Music theory models in Go.
  • PortAudio - Go bindings for the PortAudio audio I/O library.
  • portmidi - Go bindings for PortMidi.
  • taglib - Go bindings for taglib.
  • vorbis - "Native" Go Vorbis decoder (uses CGO, but has no dependencies).
  • waveform - Go package capable of generating waveform images from audio streams.

Authentication and OAuth

Libraries for implementing authentications schemes.

  • authboss - Modular authentication system for the web. It tries to remove as much boilerplate and "hard things" as possible so that each time you start a new web project in Go, you can plug it in, configure, and start building your app without having to build an authentication system each time.
  • casbin - Authorization library that supports access control models like ACL, RBAC, ABAC.
  • cookiestxt - provides parser of cookies.txt file format.
  • Go-AWS-Auth - AWS (Amazon Web Services) request signing library.
  • go-jose - Fairly complete implementation of the JOSE working group's JSON Web Token, JSON Web Signatures, and JSON Web Encryption specs.
  • go-oauth2-server - Standalone, specification-compliant, OAuth2 server written in Golang.
  • gologin - chainable handlers for login with OAuth1 and OAuth2 authentication providers.
  • gorbac - provides a lightweight role-based access control (RBAC) implementation in Golang.
  • goth - provides a simple, clean, and idiomatic way to use OAuth and OAuth2. Handles multiple providers out of the box.
  • httpauth - HTTP Authentication middleware.
  • jwt - Clean and easy to use implementation of JSON Web Tokens (JWT).
  • jwt-auth - JWT middleware for Golang http servers with many configuration options.
  • jwt-go - Golang implementation of JSON Web Tokens (JWT).
  • loginsrv - JWT login microservice with plugable backends such as OAuth2 (Github), htpasswd, osiam.
  • oauth2 - Successor of goauth2. Generic OAuth 2.0 package that comes with JWT, Google APIs, Compute Engine and App Engine support.
  • osin - Golang OAuth2 server library.
  • permissions2 - Library for keeping track of users, login states and permissions. Uses secure cookies and bcrypt.
  • securecookie - Efficient secure cookie encoding/decoding.
  • session - Go session management for web servers (including support for Google App Engine - GAE).
  • sessiongate-go - Go session management using the SessionGate Redis module.
  • sessions - Dead simple, highly performant, highly customizable sessions service for go http servers.
  • yubigo - Yubikey client package that provides a simple API to integrate the Yubico Yubikey into a go application.

Command Line

Standard CLI

Libraries for building standard or basic Command Line applications.

  • argparse - Command line argument parser inspired by Python's argparse module.
  • argv - Go library to split command line string as arguments array using the bash syntax.
  • cli - Feature-rich and easy to use command-line package based on golang struct tags.
  • cli - Simple and complete API for building command line interfaces in Go.
  • cli-init - The easy way to start building Golang command line applications.
  • climax - Alternative CLI with "human face", in spirit of Go command.
  • cobra - Commander for modern Go CLI interactions.
  • commandeer - Dev-friendly CLI apps: sets up flags, defaults, and usage based on struct fields and tags.
  • complete - Write bash completions in Go + Go command bash completion.
  • docopt.go - Command-line arguments parser that will make you smile.
  • drive - Google Drive client for the commandline.
  • env - Tag-based environment configuration for structs.
  • flag - Simple but powerful command line option parsing library for Go supporting subcommand.
  • go-arg - Struct-based argument parsing in Go.
  • go-flags - go command line option parser.
  • gocmd - Go library for building command line applications.
  • kingpin - Command line and flag parser supporting sub commands.
  • liner - Go readline-like library for command-line interfaces.
  • mitchellh/cli - Go library for implementing command-line interfaces.
  • mow.cli - Go library for building CLI applications with sophisticated flag and argument parsing and validation.
  • pflag - Drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags.
  • readline - Pure golang implementation that provides most features in GNU-Readline under MIT license.
  • sflags - Struct based flags generator for flag, urfave/cli, pflag, cobra, kingpin and other libraries.
  • strumt - Library to create prompt chain.
  • ukautz/clif - Small command line interface framework.
  • urfave/cli - Simple, fast, and fun package for building command line apps in Go (formerly codegangsta/cli).
  • wlog - Simple logging interface that supports cross-platform color and concurrency.
  • wmenu - Easy to use menu structure for cli applications that prompts users to make choices.

Advanced Console UIs

Libraries for building Console Applications and Console User Interfaces.

  • aurora - ANSI terminal colors that supports fmt.Printf/Sprintf.
  • chalk - Intuitive package for prettifying terminal/console output.
  • color - Versatile package for colored terminal output.
  • colourize - Go library for ANSI colour text in terminals.
  • go-ataman - Go library for rendering ANSI colored text templates in terminals.
  • go-colorable - Colorable writer for windows.
  • go-colortext - Go library for color output in terminals.
  • go-isatty - isatty for golang.
  • go-prompt - Library for building a powerful interactive prompt, inspired by python-prompt-toolkit.
  • gocui - Minimalist Go library aimed at creating Console User Interfaces.
  • gommon/color - Style terminal text.
  • mpb - Multi progress bar for terminal applications.
  • progressbar - Basic thread-safe progress bar that works in every OS.
  • termbox-go - Termbox is a library for creating cross-platform text-based interfaces.
  • termtables - Go port of the Ruby library terminal-tables for simple ASCII table generation as well as providing markdown and HTML output.
  • termui - Go terminal dashboard based on termbox-go and inspired by blessed-contrib.
  • tui-go - Go UI library for building rich terminal applications.
  • uilive - Library for updating terminal output in realtime.
  • uiprogress - Flexible library to render progress bars in terminal applications.
  • uitable - Library to improve readability in terminal apps using tabular data.

Configuration

Libraries for configuration parsing.

  • config - JSON or YAML configuration wrapper with environment variables and flags parsing.
  • configure - Provides configuration through multiple sources, including JSON, flags and environment variables.
  • env - Parse environment variables to Go structs (with defaults).
  • envcfg - Un-marshaling environment variables to Go structs.
  • envconf - Configuration from environment.
  • envconfig - Read your configuration from environment variables.
  • envh - Helpers to manage environment variables.
  • gcfg - read INI-style configuration files into Go structs; supports user-defined types and subsections.
  • goConfig - Parses a struct as input and populates the fields of this struct with parameters from command line, environment variables and configuration file.
  • godotenv - Go port of Ruby's dotenv library (Loads environment variables from .env).
  • gofigure - Go application configuration made easy.
  • gone/jconf - Modular JSON configuration. Keep you config structs along with the code they configure and delegate parsing to submodules without sacrificing full config serialization.
  • hjson - Human JSON, a configuration file format for humans. Relaxed syntax, fewer mistakes, more comments.
  • ingo - Flags persisted in an ini-like config file.
  • ini - Go package to read and write INI files.
  • joshbetz/config - Small configuration library for Go that parses environment variables, JSON files, and reloads automatically on SIGHUP.
  • mini - Golang package for parsing ini-style configuration files.
  • store - Lightweight configuration manager for Go.
  • viper - Go configuration with fangs.
  • xdg - Cross platform package that follows the XDG Standard.

Continuous Integration

Tools for help with continuous integration.

  • drone - Drone is a Continuous Integration platform built on Docker, written in Go.
  • gomason - Test, Build, Sign, and Publish your go binaries from a clean workspace.
  • goveralls - Go integration for Coveralls.io continuous code coverage tracking system.
  • overalls - Multi-Package go project coverprofile for tools like goveralls.
  • roveralls - Recursive coverage testing tool.

CSS Preprocessors

Libraries for preprocessing CSS files.

  • c6 - High performance SASS compatible-implementation compiler written in Go.
  • gcss - Pure Go CSS Preprocessor.
  • go-libsass - Go wrapper to the 100% Sass compatible libsass project.

Data Structures

Generic datastructures and algorithms in Go.

  • binpacker - Binary packer and unpacker helps user build custom binary stream.
  • bit - Golang set data structure with bonus bit-twiddling functions.
  • bitset - Go package implementing bitsets.
  • bloom - Bloom filters implemented in Go.
  • bloom - Golang Bloom filter implementation.
  • boomfilters - Probabilistic data structures for processing continuous, unbounded streams.
  • concurrent-writer - Highly concurrent drop-in replacement for bufio.Writer.
  • conjungo - A small, powerful and flexible merge library.
  • count-min-log - Go implementation Count-Min-Log sketch: Approximately counting with approximate counters (Like Count-Min sketch but using less memory).
  • cuckoofilter - Cuckoo filter: a good alternative to a counting bloom filter implemented in Go.
  • encoding - Integer Compression Libraries for Go.
  • go-adaptive-radix-tree - Go implementation of Adaptive Radix Tree.
  • go-datastructures - Collection of useful, performant, and thread-safe data structures.
  • go-ef - A Go implementation of the Elias-Fano encoding.
  • go-geoindex - In-memory geo index.
  • go-rquad - Region quadtrees with efficient point location and neighbour finding.
  • gods - Go Data Structures. Containers, Sets, Lists, Stacks, Maps, BidiMaps, Trees, HashSet etc.
  • golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go.
  • goset - A useful Set collection implementation for Go.
  • goskiplist - Skip list implementation in Go.
  • gota - Implementation of dataframes, series, and data wrangling methods for Go.
  • hilbert - Go package for mapping values to and from space-filling curves, such as Hilbert and Peano curves.
  • hyperloglog - HyperLogLog implementation with Sparse, LogLog-Beta bias correction and TailCut space reduction.
  • levenshtein - Levenshtein distance and similarity metrics with customizable edit costs and Winkler-like bonus for common prefix.
  • levenshtein - Implementation to calculate levenshtein distance in Go.
  • mafsa - MA-FSA implementation with Minimal Perfect Hashing.
  • merkletree - Implementation of a merkle tree providing an efficient and secure verification of the contents of data structures.
  • roaring - Go package implementing compressed bitsets.
  • skiplist - Skiplist implementation in Go.
  • trie - Trie implementation in Go.
  • ttlcache - In-memory LRU string-interface{} map with expiration for golang.
  • willf/bloom - Go package implementing Bloom filters.

Database

Databases implemented in Go.

  • badger - Fast key-value store in Go.
  • BigCache - Efficient key/value cache for gigabytes of data.
  • bolt - Low-level key/value database for Go.
  • buntdb - Fast, embeddable, in-memory key/value database for Go with custom indexing and spatial support.
  • cache2go - In-memory key:value cache which supports automatic invalidation based on timeouts.
  • clusteredBigCache - BigCache with clustering support and individual item expiration.
  • cockroach - Scalable, Geo-Replicated, Transactional Datastore.
  • couchcache - RESTful caching micro-service backed by Couchbase server.
  • dgraph - Scalable, Distributed, Low Latency, High Throughput Graph Database.
  • diskv - Home-grown disk-backed key-value store.
  • eliasdb - Dependency-free, transactional graph database with REST API, phrase search and SQL-like query language.
  • forestdb - Go bindings for ForestDB.
  • GCache - Cache library with support for expirable Cache, LFU, LRU and ARC.
  • go-cache - In-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.
  • goleveldb - Implementation of the LevelDB key/value database in Go.
  • gorocksdb - Gorocksdb is a wrapper for RocksDB written in Go.
  • groupcache - Groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.
  • influxdb - Scalable datastore for metrics, events, and real-time analytics.
  • jaeger - A distributed tracing system.
  • ledisdb - Ledisdb is a high performance NoSQL like Redis based on LevelDB.
  • levigo - Levigo is a Go wrapper for LevelDB.
  • moss - Moss is a simple LSM key-value storage engine written in 100% Go.
  • piladb - Lightweight RESTful database engine based on stack data structures.
  • prometheus - Monitoring system and time series database.
  • rqlite - The lightweight, distributed, relational database built on SQLite.
  • Scribble - Tiny flat file JSON store.
  • tempdb - Key-value store for temporary items.
  • tidb - TiDB is a distributed SQL database. Inspired by the design of Google F1.
  • tiedot - Your NoSQL database powered by Golang.

Database schema migration.

  • darwin - Database schema evolution library for Go.
  • go-fixtures - Django style fixtures for Golang's excellent built-in database/sql library.
  • gondolier - Gondolier is a library to auto migrate database schemas using structs.
  • goose - Database migration tool. You can manage your database's evolution by creating incremental SQL or Go scripts.
  • gormigrate - Database schema migration helper for Gorm ORM.
  • migrate - Database migrations. CLI and Golang library.
  • pravasan - Simple Migration tool - currently for MySQL but planning to soon support Postgres, SQLite, MongoDB, etc.
  • soda - Database migration, creation, ORM, etc... for MySQL, PostgreSQL, and SQLite.
  • sql-migrate - Database migration tool. Allows embedding migrations into the application using go-bindata.

Database tools.

  • chproxy - HTTP proxy for ClickHouse database.
  • go-mysql - Go toolset to handle MySQL protocol and replication.
  • go-mysql-elasticsearch - Sync your MySQL data into Elasticsearch automatically.
  • kingshard - kingshard is a high performance proxy for MySQL powered by Golang.
  • myreplication - MySql binary log replication listener. Supports statement and row based replication.
  • orchestrator - MySQL replication topology manager & visualizer.
  • pgweb - Web-based PostgreSQL database browser.
  • prep - Use prepared SQL statements without changing your code.
  • pREST - Serve a RESTful API from any PostgreSQL database.
  • rwdb - rwdb provides read replica capability for multiple database servers setup.
  • vitess - vitess provides servers and tools which facilitate scaling of MySQL databases for large scale web services.

SQL query builder, libraries for building and using SQL.

  • dat - Go Postgres Data Access Toolkit.
  • Dotsql - Go library that helps you keep sql files in one place and use them with ease.
  • gendry - Non-invasive SQL builder and powerful data binder.
  • goqu - Idiomatic SQL builder and query library.
  • igor - Abstraction layer for PostgreSQL that supports advanced functionality and uses gorm-like syntax.
  • ozzo-dbx - Powerful data retrieval methods as well as DB-agnostic query building capabilities.
  • scaneo - Generate Go code to convert database rows into arbitrary structs.
  • sqrl - SQL query builder, fork of Squirrel with improved performance.
  • Squirrel - Go library that helps you build SQL queries.
  • xo - Generate idiomatic Go code for databases based on existing schema definitions or custom queries supporting PostgreSQL, MySQL, SQLite, Oracle, and Microsoft SQL Server.

Database Drivers

Libraries for connecting and operating databases.

  • Relational Databases

    • avatica - Apache Phoenix/Avatica SQL driver for database/sql.
    • bgc - Datastore Connectivity for BigQuery for go.
    • firebirdsql - Firebird RDBMS SQL driver for Go.
    • go-adodb - Microsoft ActiveX Object DataBase driver for go that uses database/sql.
    • go-bqstreamer - BigQuery fast and concurrent stream insert.
    • go-mssqldb - Microsoft MSSQL driver for Go.
    • go-oci8 - Oracle driver for go that uses database/sql.
    • go-sql-driver/mysql - MySQL driver for Go.
    • go-sqlite3 - SQLite3 driver for go that uses database/sql.
    • gofreetds - Microsoft MSSQL driver. Go wrapper over FreeTDS.
    • pgx - PostgreSQL driver supporting features beyond those exposed by database/sql.
    • pq - Pure Go Postgres driver for database/sql.
  • NoSQL Databases

    • aerospike-client-go - Aerospike client in Go language.
    • arangolite - Lightweight golang driver for ArangoDB.
    • asc - Datastore Connectivity for Aerospike for go.
    • cayley - Graph database with support for multiple backends.
    • dsc - Datastore connectivity for SQL, NoSQL, structured files.
    • dynago - Dynago is a principle of least surprise client for DynamoDB.
    • go-couchbase - Couchbase client in Go.
    • go-couchdb - Yet another CouchDB HTTP API wrapper for Go.
    • gocb - Official Couchbase Go SDK.
    • gocql - Go language driver for Apache Cassandra.
    • gomemcache - memcache client library for the Go programming language.
    • gorethink - Go language driver for RethinkDB.
    • goriak - Go language driver for Riak KV.
    • mgo - MongoDB driver for the Go language that implements a rich and well tested selection of features under a very simple API following standard Go idioms
    • neo4j - Neo4j Rest API Bindings for Golang.
    • Neo4j-GO - Neo4j REST Client in golang.
    • neoism - Neo4j client for Golang.
    • redigo - Redigo is a Go client for the Redis database.
    • redis - Redis client for Golang.
    • redis - Simple, powerful Redis client for Go.
    • redis - Redis-protocol compatible TCP servers/services.
    • xredis - Typesafe, customizable, clean & easy to use Redis client.
  • Search and Analytic Databases.

    • bleve - Modern text indexing library for go.
    • elastic - Elasticsearch client for Go.
    • elasticsql - Convert sql to elasticsearch dsl in Go.
    • elastigo - Elasticsearch client library.
    • goes - Library to interact with Elasticsearch.
    • riot - Go Open Source, Distributed, Simple and efficient Search Engine
    • skizze - probabilistic data-structures service and storage.

Date and Time

Libraries for working with dates and times.

  • carbon - Simple Time extension with a lot of util methods, ported from PHP Carbon library.
  • date - Augments Time for working with dates, date ranges, time spans, periods, and time-of-day.
  • dateparse - Parse date's without knowing format in advance.
  • durafmt - Time duration formatting library for Go.
  • feiertage - Set of functions to calculate public holidays in Germany, incl. specialization on the states of Germany (Bundesländer). Things like Easter, Pentecost, Thanksgiving...
  • go-persian-calendar - The implementation of the Persian (Solar Hijri) Calendar in Go (golang).
  • go-sunrise - Calculate the sunrise and sunset times for a given location.
  • goweek - Library for working with week entity in golang.
  • now - Now is a time toolkit for golang.
  • NullTime - Nullable time.Time.
  • strftime - C99-compatible strftime formatter.
  • timespan - For interacting with intervals of time, defined as a start time and a duration.
  • timeutil - Useful extensions (Timedelta, Strftime, ...) to the golang's time package.
  • tuesday - Ruby-compatible Strftime function.

Distributed Systems

Packages that help with building Distributed Systems.

  • celeriac - Library for adding support for interacting and monitoring Celery workers, tasks and events in Go.
  • digota - grpc ecommerce microservice.
  • drmaa - Job submission library for cluster schedulers based on the DRMAA standard.
  • emitter-io - High performance, distributed, secure and low latency publish-subscribe platform built with MQTT, Websockets and love.
  • flowgraph - MPI-style ready-send coordination layer.
  • gleam - Fast and scalable distributed map/reduce system written in pure Go and Luajit, combining Go's high concurrency with Luajit's high performance, runs standalone or distributed.
  • glow - Easy-to-Use scalable distributed big data processing, Map-Reduce, DAG execution, all in pure Go.
  • go-health - Library for enabling asynchronous dependency health checks in your service.
  • go-jump - Port of Google's "Jump" Consistent Hash function.
  • go-kit - Microservice toolkit with support for service discovery, load balancing, pluggable transports, request tracking, etc.
  • gorpc - Simple, fast and scalable RPC library for high load.
  • grpc-go - The Go language implementation of gRPC. HTTP/2 based RPC.
  • hprose - Very newbility RPC Library, support 25+ languages now.
  • jsonrpc - The jsonrpc package helps implement of JSON-RPC 2.0.
  • jsonrpc - JSON-RPC 2.0 HTTP client implementation.
  • KrakenD - Ultra performant API Gateway framework with middlewares.
  • micro - Pluggable microservice toolkit and distributed systems platform.
  • NATS - Lightweight, high performance messaging system for microservices, IoT, and cloud native systems.
  • raft - Golang implementation of the Raft consensus protocol, by HashiCorp.
  • raft - Go implementation of the Raft consensus protocol, by CoreOS.
  • ringpop-go - Scalable, fault-tolerant application-layer sharding for Go applications.
  • rpcx - Distributed pluggable RPC service framework like alibaba Dubbo.
  • sleuth - Library for master-less p2p auto-discovery and RPC between HTTP services (using ZeroMQ).
  • tendermint - High-performance middleware for transforming a state machine written in any programming language into a Byzantine Fault Tolerant replicated state machine using the Tendermint consensus and blockchain protocols.
  • torrent - BitTorrent client package.
    • dht - BitTorrent Kademlia DHT implementation.
    • go-peerflix - Video streaming torrent client.

Email

Libraries that implement email creation and sending.

  • douceur - CSS inliner for your HTML emails.
  • email - A robust and flexible email library for Go.
  • go-dkim - DKIM library, to sign & verify email.
  • go-imap - IMAP library for clients and servers.
  • go-message - Streaming library for the Internet Message Format and mail messages.
  • Gomail - Gomail is a very simple and powerful package to send emails.
  • Hectane - Lightweight SMTP client providing an HTTP API.
  • hermes - Golang package that generates clean, responsive HTML e-mails.
  • MailHog - Email and SMTP testing with web and API interface.
  • SendGrid - SendGrid's Go library for sending email.
  • smtp - SMTP server protocol state machine.

Embeddable Scripting Languages

Embedding other languages inside your go code.

  • agora - Dynamically typed, embeddable programming language in Go.
  • anko - Scriptable interpreter written in Go.
  • binder - Go to Lua binding library, based on gopher-lua.
  • gisp - Simple LISP in Go.
  • go-duktape - Duktape JavaScript engine bindings for Go.
  • go-lua - Port of the Lua 5.2 VM to pure Go.
  • go-php - PHP bindings for Go.
  • go-python - naive go bindings to the CPython C-API.
  • golua - Go bindings for Lua C API.
  • gopher-lua - Lua 5.1 VM and compiler written in Go.
  • ngaro - Embeddable Ngaro VM implementation enabling scripting in Retro.
  • otto - JavaScript interpreter written in Go.
  • purl - Perl 5.18.2 embedded in Go.

Files

Libraries for handling files and file systems.

  • afero - FileSystem Abstraction System for Go.
  • go-csv-tag - Load csv file using tag.
  • go-gtfs - Load gtfs files in go.
  • notify - File system event notification library with simple API, similar to os/signal.
  • skywalker - Package to allow one to concurrently go through a filesystem with ease.
  • tarfs - Implementation of the FileSystem interface for tar files.

Financial

Packages for accounting and finance.

  • accounting - money and currency formatting for golang.
  • decimal - Arbitrary-precision fixed-point decimal numbers.
  • go-finance - Comprehensive financial markets data in Go.
  • go-finance - Library of financial functions for time value of money (annuities), cash flow, interest rate conversions, bonds and depreciation calculations.
  • go-money - Implementation of Fowler's Money pattern.
  • ofxgo - Query OFX servers and/or parse the responses (with example command-line client).
  • transaction - Embedded transactional database of accounts, running in multithreaded mode.
  • vat - VAT number validation & EU VAT rates.

Forms

Libraries for working with forms.

  • bind - Bind form data to any Go values.
  • binding - Binds form and JSON data from net/http Request to struct.
  • conform - Keeps user input in check. Trims, sanitizes & scrubs data based on struct tags.
  • form - Decodes url.Values into Go value(s) and Encodes Go value(s) into url.Values. Dual Array and Full map support.
  • formam - decode form's values into a struct.
  • forms - Framework-agnostic library for parsing and validating form/JSON data which supports multipart forms and files.
  • gorilla/csrf - CSRF protection for Go web applications & services.
  • nosurf - CSRF protection middleware for Go.

Game Development

Awesome game development libraries.

  • Azul3D - 3D game engine written in Go.
  • Ebiten - dead simple 2D game library in Go.
  • engo - Engo is an open-source 2D game engine written in Go. It follows the Entity-Component-System paradigm.
  • GarageEngine - 2d game engine written in Go working on OpenGL.
  • glop - Glop (Game Library Of Power) is a fairly simple cross-platform game library.
  • go-astar - Go implementation of the A* path finding algorithm.
  • go-collada - Go package for working with the Collada file format.
  • go-sdl2 - Go bindings for the Simple DirectMedia Layer.
  • go3d - Performance oriented 2D/3D math package for Go.
  • gonet - Game server skeleton implemented with golang.
  • goworld - Scalable game server engine, featuring space-entity framework and hot-swapping
  • Leaf - Lightweight game server framework.
  • nano - Lightweight, facility, high performance golang based game server framework
  • Oak - Pure Go game engine.
  • Pixel - Hand-crafted 2D game library in Go.
  • raylib-go - Go bindings for raylib, a simple and easy-to-use library to learn videogames programming.
  • termloop - Terminal-based game engine for Go, built on top of Termbox.

Generation and Generics

Tools to enhance the language with features like generics via code generation.

  • efaceconv - Code generation tool for high performance conversion from interface{} to immutable type without allocations.
  • gen - Code generation tool for ‘generics’-like functionality.
  • go-enum - Code generation for enums from code comments.
  • go-linq - .NET LINQ-like query methods for Go.
  • goderive - Derives functions from input types.
  • interfaces - Command line tool for generating interface definitions.
  • jennifer - Generate arbitrary Go code without templates.
  • pkgreflect - Go preprocessor for package scoped reflection.

Geographic

Geographic tools and servers

  • geocache - In-memory cache that is suitable for geolocation based applications.
  • pbf - OpenStreetMap PBF golang encoder/decoder.
  • S2 geometry - S2 geometry library in Go.
  • Tile38 - Geolocation DB with spatial index and realtime geofencing.

Go Compilers

Tools for compiling Go to other languages.

  • gopherjs - Compiler from Go to JavaScript.
  • llgo - LLVM-based compiler for Go.
  • tardisgo - Golang to Haxe to CPP/CSharp/Java/JavaScript transpiler.

Goroutines

Tools for managing and working with Goroutines.

  • cyclicbarrier - CyclicBarrier for golang.
  • go-floc - Orchestrate goroutines with ease.
  • go-flow - Control goroutines execution order.
  • GoSlaves - Simple and Asynchronous Goroutine pool library.
  • goworker - goworker is a Go-based background worker.
  • grpool - Lightweight Goroutine pool.
  • parallel-fn - Run functions in parallel.
  • pool - Limited consumer goroutine or unlimited goroutine pool for easier goroutine handling and cancellation.
  • semaphore - Semaphore pattern implementation with timeout of lock/unlock operations based on channel and context.
  • semaphore - Fast resizable semaphore implementation based on CAS (faster than channel-based semaphore implementations).
  • tunny - Goroutine pool for golang.
  • worker-pool - goworker is a Go simple async worker pool.
  • workerpool - Goroutine pool that limits the concurrency of task execution, not the number of tasks queued.

GUI

Libraries for building GUI Applications.

Toolkits

  • app - Package to create apps with GO, HTML and CSS. Supports: MacOS, Windows in progress.
  • go-astilectron - Build cross platform GUI apps with GO and HTML/JS/CSS (powered by Electron).
  • go-gtk - Go bindings for GTK.
  • go-qml - QML support for the Go language.
  • go-sciter - Go bindings for Sciter: the Embeddable HTML/CSS/script engine for modern desktop UI development. Cross platform.
  • goqt - Golang bindings to the Qt cross-platform application framework.
  • gotk3 - Go bindings for GTK3.
  • gowd - Rapid and simple desktop UI development with GO, HTML, CSS and NW.js. Cross platform.
  • qt - Qt binding for Go (support for Windows / macOS / Linux / Android / iOS / Sailfish OS / Raspberry Pi).
  • ui - Platform-native GUI library for Go. Cross platform.
  • walk - Windows application library kit for Go.
  • webview - Cross-platform webview window with simple two-way JavaScript bindings (Windows / macOS / Linux).

Interaction

  • gosx-notifier - OSX Desktop Notifications library for Go.
  • robotgo - Go Native cross-platform GUI system automation. Control the mouse, keyboard and other.
  • systray - Cross platform Go library to place an icon and menu in the notification area.
  • trayhost - Cross-platform Go library to place an icon in the host operating system's taskbar.

Hardware

Libraries, tools, and tutorials for interacting with hardware.

See go-hardware for a comprehensive list.

Images

Libraries for manipulating images.

  • bild - Collection of image processing algorithms in pure Go.
  • bimg - Small package for fast and efficient image processing using libvips.
  • geopattern - Create beautiful generative image patterns from a string.
  • gg - 2D rendering in pure Go.
  • gift - Package of image processing filters.
  • go-cairo - Go binding for the cairo graphics library.
  • go-gd - Go binding for GD library.
  • go-nude - Nudity detection with Go.
  • go-opencv - Go bindings for OpenCV.
  • go-webcolors - Port of webcolors library from Python to Go.
  • gocv - Go package for computer vision using OpenCV 3.3+.
  • govatar - Library and CMD tool for generating funny avatars.
  • imagick - Go binding to ImageMagick's MagickWand C API.
  • imaginary - Fast and simple HTTP microservice for image resizing.
  • imaging - Simple Go image processing package.
  • img - Selection of image manipulation tools.
  • ln - 3D line art rendering in Go.
  • mpo - Decoder and conversion tool for MPO 3D Photos.
  • picfit - An image resizing server written in Go.
  • pt - Path tracing engine written in Go.
  • resize - Image resizing for Go with common interpolation methods.
  • rez - Image resizing in pure Go and SIMD.
  • smartcrop - Finds good crops for arbitrary images and crop sizes.
  • svgo - Go Language Library for SVG generation.
  • tga - Package tga is a TARGA image format decoder/encoder.

IoT (Internet of Things)

Libraries for programming devices of the IoT.

  • connectordb - Open-Source Platform for Quantified Self & IoT.
  • devices - Suite of libraries for IoT devices, experimental for x/exp/io.
  • eywa - Project Eywa is essentially a connection manager that keeps track of connected devices.
  • flogo - Project Flogo is an Open Source Framework for IoT Edge Apps & Integration.
  • gatt - Gatt is a Go package for building Bluetooth Low Energy peripherals.
  • gobot - Gobot is a framework for robotics, physical computing, and the Internet of Things.
  • mainflux - Industrial IoT Messaging and Device Management Server.
  • periph - Peripherals I/O to interface with low-level board facilities.
  • sensorbee - Lightweight stream processing engine for IoT.

Logging

Libraries for generating and working with log files.

  • distillog - distilled levelled logging (think of it as stdlib + log levels).
  • glg - glg is simple and fast leveled logging library for Go.
  • glog - Leveled execution logs for Go.
  • go-cronowriter - Simple writer that rotate log files automatically based on current date and time, like cronolog.
  • go-log - Log lib supports level and multi handlers.
  • go-log - Log4j implementation in Go.
  • go-logger - Simple logger of Go Programs, with level handlers.
  • gologger - Simple easy to use log lib for go, logs in Colored Console, Simple Console, File or Elasticsearch.
  • gomol - Multiple-output, structured logging for Go with extensible logging outputs.
  • gone/log - Fast, extendable, full-featured, std-lib source compatible log library.
  • journald - Go implementation of systemd Journal's native API for logging.
  • log - Structured logging package for Go.
  • log - Simple, configurable and scalable Structured Logging for Go.
  • log - Structured log interface for Go cleanly separates logging facade from its implementation.
  • log-voyage - Full-featured logging saas written in golang.
  • log15 - Simple, powerful logging for Go.
  • logdump - Package for multi-level logging.
  • logex - Golang log lib, supports tracking and level, wrap by standard log lib.
  • logger - Minimalistic logging library for Go.
  • logo - Golang logger to different configurable writers.
  • logrus - Structured logger for Go.
  • logrusly - logrus plug-in to send errors to a Loggly.
  • logutils - Utilities for slightly better logging in Go (Golang) extending the standard logger.
  • logxi - 12-factor app logger that is fast and makes you happy.
  • lumberjack - Simple rolling logger, implements io.WriteCloser.
  • mlog - Simple logging module for go, with 5 levels, an optional rotating logfile feature and stdout/stderr output.
  • ozzo-log - High performance logging supporting log severity, categorization, and filtering. Can send filtered log messages to various targets (e.g. console, network, mail).
  • seelog - Logging functionality with flexible dispatching, filtering, and formatting.
  • spew - Implements a deep pretty printer for Go data structures to aid in debugging.
  • stdlog - Stdlog is an object-oriented library providing leveled logging. It is very useful for cron jobs.
  • tail - Go package striving to emulate the features of the BSD tail program.
  • xlog - Plugin architecture and flexible log system for Go, with level ctrl, multiple log target and custom log format.
  • xlog - Structured logger for net/context aware HTTP handlers with flexible dispatching.
  • zap - Fast, structured, leveled logging in Go.
  • zerolog - Zero-allocation JSON logger.

Machine Learning

Libraries for Machine Learning.

  • bayesian - Naive Bayesian Classification for Golang.
  • CloudForest - Fast, flexible, multi-threaded ensembles of decision trees for machine learning in pure Go.
  • fonet - A Deep Neural Network library written in Go.
  • gago - Multi-population, flexible, parallel genetic algorithm.
  • go-cluster - Go implementation of the k-modes and k-prototypes clustering algorithms.
  • go-deep - A feature-rich neural network library in Go.
  • go-fann - Go bindings for Fast Artificial Neural Networks(FANN) library.
  • go-galib - Genetic Algorithms library written in Go / golang.
  • go-pr - Pattern recognition package in Go lang.
  • gobrain - Neural Networks written in go.
  • godist - Various probability distributions, and associated methods.
  • goga - Genetic algorithm library for Go.
  • GoLearn - General Machine Learning library for Go.
  • golinear - liblinear bindings for Go.
  • goml - On-line Machine Learning in Go.
  • goRecommend - Recommendation Algorithms library written in Go.
  • gorgonia - graph-based computational library like Theano for Go that provides primitives for building various machine learning and neural network algorithms.
  • goscore - Go Scoring API for PMML.
  • gosseract - Go package for OCR (Optical Character Recognition), by using Tesseract C++ library.
  • libsvm - libsvm golang version derived work based on LIBSVM 3.14.
  • mlgo - This project aims to provide minimalistic machine learning algorithms in Go.
  • neat - Plug-and-play, parallel Go framework for NeuroEvolution of Augmenting Topologies (NEAT).
  • neural-go - Multilayer perceptron network implemented in Go, with training via backpropagation.
  • probab - Probability distribution functions. Bayesian inference. Written in pure Go.
  • regommend - Recommendation & collaborative filtering engine.
  • shield - Bayesian text classifier with flexible tokenizers and storage backends for Go.
  • tfgo - Easy to use Tensorflow bindings: simplifies the usage of the official Tensorflow Go bindings. Define computational graphs in Go, load and execute models trained in Python.
  • Varis - Golang Neural Network.

Messaging

Libraries that implement messaging systems.

  • Centrifugo - Real-time messaging (Websockets or SockJS) server in Go.
  • dbus - Native Go bindings for D-Bus.
  • drone-line - Sending Line notifications using a binary, docker or Drone CI.
  • emitter - Emits events using Go way, with wildcard, predicates, cancellation possibilities and many other good wins.
  • event - Implementation of the pattern observer.
  • EventBus - The lightweight event bus with async compatibility.
  • gaurun-client - Gaurun Client written in Go.
  • Glue - Robust Go and Javascript Socket Library (Alternative to Socket.io).
  • go-notify - Native implementation of the freedesktop notification spec.
  • go-nsq - the official Go package for NSQ.
  • go-socket.io - socket.io library for golang, a realtime application framework.
  • go-vitotrol - Client library to Viessmann Vitotrol web service.
  • Gollum - A n:m multiplexer that gathers messages from different sources and broadcasts them to a set of destinations.
  • golongpoll - HTTP longpoll server library that makes web pub-sub simple.
  • goose - Server Sent Events in Go.
  • gopush-cluster - gopush-cluster is a go push server cluster.
  • gorush - Push notification server using APNs2 and google GCM.
  • guble - Messaging server using push notifications (Google Firebase Cloud Messaging, Apple Push Notification services, SMS) as well as websockets, a REST API, featuring distributed operation and message-persistence.
  • machinery - Asynchronous task queue/job queue based on distributed message passing.
  • mangos - Pure go implementation of the Nanomsg ("Scalable Protocols") with transport interoperability.
  • melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling.
  • messagebus - messagebus is a Go simple async message bus, perfect for using as event bus when doing event sourcing, CQRS, DDD.
  • NATS Go Client - Lightweight and high performance publish-subscribe and distributed queueing messaging system - this is the Go library.
  • nsq-event-bus - A tiny wrapper around NSQ topic and channel.
  • oplog - Generic oplog/replication system for REST APIs.
  • pubsub - Simple pubsub package for go.
  • rabbus - A tiny wrapper over amqp exchanges and queues.
  • rabtap - RabbitMQ swiss army knife cli app.
  • RapidMQ - RapidMQ is a lightweight and reliable library for managing of the local messages queue.
  • sarama - Go library for Apache Kafka.
  • Uniqush-Push - Redis backed unified push service for server-side notifications to mobile devices.
  • zmq4 - Go interface to ZeroMQ version 4. Also available for version 3 and version 2.

Miscellaneous

These libraries were placed here because none of the other categories seemed to fit.

  • alice - Additive dependency injection container for Golang.
  • anagent - Minimalistic, pluggable Golang evloop/timer handler with dependency-injection.
  • antch - A fast, powerful and extensible web crawling & scraping framework.
  • archiver - Library and command for making and extracting .zip and .tar.gz archives.
  • autoflags - Go package to automatically define command line flags from struct fields.
  • avgRating - Calculate average score and rating based on Wilson Score Equation.
  • banner - Add beautiful banners into your Go applications.
  • base64Captcha - Base64captch supports digit, number, alphabet, arithmetic, audio and digit-alphabet captcha.
  • battery - Cross-platform, normalized battery information library.
  • bitio - Highly optimized bit-level Reader and Writer for Go.
  • browscap_go - GoLang Library for Browser Capabilities Project.
  • captcha - Package captcha provides an easy to use, unopinionated API for captcha generation.
  • conv - Package conv provides fast and intuitive conversions across Go types.
  • datacounter - Go counters for readers/writer/http.ResponseWriter.
  • errors - Package that provides simple error handling primitives.
  • go-chat-bot - IRC, Slack & Telegram bot written in Go.
  • go-commons-pool - Generic object pool for Golang.
  • go-multierror - Go (golang) package for representing a list of errors as a single error.
  • go-openapi - Collection of packages to parse and utilize open-api schemas.
  • go-resiliency - Resiliency patterns for golang.
  • go-sarah - Framework to build bot for desired chat services including LINE, Slack, Gitter and more.
  • go-unarr - Decompression library for RAR, TAR, ZIP and 7z archives.
  • go.uuid - Implementation of Universally Unique Identifier (UUID). Supported both creation and parsing of UUIDs.
  • gofakeit - Random data generator written in go.
  • goid - Generate and Parse RFC4122 compliant V4 UUIDs.
  • gopsutil - Cross-platform library for retrieving process and system utilization(CPU, Memory, Disks, etc).
  • gosms - Your own local SMS gateway in Go that can be used to send SMS.
  • gountries - Package that exposes country and subdivision data.
  • hanu - Framework for writing Slack bots.
  • health - Easy to use, extensible health check library.
  • healthcheck - An opinionated and concurrent health-check HTTP handler for RESTful services.
  • hostutils - A golang library for packing and unpacking FQDNs list.
  • indigo - Distributed unique ID generator of using Sonyflake and encoded by Base58.
  • jobs - Persistent and flexible background jobs library.
  • lk - A simple licensing library for golang.
  • margelet - Framework for building Telegram bots.
  • pdfgen - HTTP service to generate PDF from Json requests.
  • persian - Some utilities for Persian language in go.
  • secdl - Lighttpd ModSecDownload algorithm ported to go to secure download urls.
  • shellwords - A Golang library to manipulate strings according to the word parsing rules of the UNIX Bourne shell.
  • shortid - Distributed generation of super short, unique, non-sequential, URL friendly IDs.
  • slacker - Easy to use framework to create Slack bots.
  • stats - Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc...
  • turtle - Emojis for Go.
  • uuid - Generate, encode, and decode UUIDs v1 with fast or cryptographic-quality random node identifier.
  • VarHandler - Generate boilerplate http input and ouput handling.
  • werr - Error Wrapper creates an wrapper for the error type in Go which captures the File, Line and Stack of where it was called.
  • wuid - An extremely fast unique number generator, 10-135 times faster than UUID.
  • xkg - X Keyboard Grabber.
  • xstrings - Collection of useful string functions ported from other languages.

Natural Language Processing

Libraries for working with human languages.

  • dpar - Transition-based statistical dependency parser.
  • go-eco - Similarity, dissimilarity and distance matrices; diversity, equitability and inequality measures; species richness estimators; coenocline models.
  • go-i18n - Package and an accompanying tool to work with localized text.
  • go-mystem - CGo bindings to Yandex.Mystem - russian morphology analyzer.
  • go-nlp - Utilities for working with discrete probability distributions and other tools useful for doing NLP work.
  • go-stem - Implementation of the porter stemming algorithm.
  • go-unidecode - ASCII transliterations of Unicode text.
  • go2vec - Reader and utility functions for word2vec embeddings.
  • gojieba - This is a Go implementation of jieba which a Chinese word splitting algorithm.
  • golibstemmer - Go bindings for the snowball libstemmer library including porter 2.
  • gounidecode - Unicode transliterator (also known as unidecode) for Go.
  • gse - Go efficient text segmentation; support english, chinese, japanese and other.
  • icu - Cgo binding for icu4c C library detection and conversion functions. Guaranteed compatibility with version 50.1.
  • libtextcat - Cgo binding for libtextcat C library. Guaranteed compatibility with version 2.2.
  • MMSEGO - This is a GO implementation of MMSEG which a Chinese word splitting algorithm.
  • nlp - Extract values from strings and fill your structs with nlp.
  • nlp - Go Natural Language Processing library supporting LSA (Latent Semantic Analysis).
  • paicehusk - Golang implementation of the Paice/Husk Stemming Algorithm.
  • petrovich - Petrovich is the library which inflects Russian names to given grammatical case.
  • porter - This is a fairly straightforward port of Martin Porter's C implementation of the Porter stemming algorithm.
  • porter2 - Really fast Porter 2 stemmer.
  • prose - Library for text processing that supports tokenization, part-of-speech tagging, named-entity extraction, and more.
  • RAKE.go - Go port of the Rapid Automatic Keyword Extraction Algorithm (RAKE).
  • segment - Go library for performing Unicode Text Segmentation as described in Unicode Standard Annex #29
  • sentences - Sentence tokenizer: converts text into a list of sentences.
  • shamoji - The shamoji is word filtering package written in Go.
  • snowball - Snowball stemmer port (cgo wrapper) for Go. Provides word stem extraction functionality Snowball native.
  • stemmer - Stemmer packages for Go programming language. Includes English and German stemmers.
  • textcat - Go package for n-gram based text categorization, with support for utf-8 and raw text.
  • whatlanggo - Natural language detection package for Go. Supports 84 languages and 24 scripts (writing systems e.g. Latin, Cyrillic, etc).
  • when - Natural EN and RU language date/time parser with pluggable rules.

Networking

Libraries for working with various layers of the network.

  • arp - Package arp implements the ARP protocol, as described in RFC 826.
  • buffstreams - Streaming protocolbuffer data over TCP made easy.
  • canopus - CoAP Client/Server implementation (RFC 7252).
  • cidranger - Fast IP to CIDR lookup for Go.
  • dhcp6 - Package dhcp6 implements a DHCPv6 server, as described in RFC 3315.
  • dns - Go library for working with DNS.
  • ether - Cross-platform Go package for sending and receiving ethernet frames.
  • ethernet - Package ethernet implements marshaling and unmarshaling of IEEE 802.3 Ethernet II frames and IEEE 802.1Q VLAN tags.
  • fasthttp - Package fasthttp is a fast HTTP implementation for Go, up to 10 times faster than net/http.
  • fortio - Load testing library and command line tool and web UI. Allows to specify a set query-per-second load and record latency histograms and other useful stats and graph them.
  • ftp - Package ftp implements a FTP client as described in RFC 959.
  • go-getter - Go library for downloading files or directories from various sources using a URL.
  • go-stun - Go implementation of the STUN client (RFC 3489 and RFC 5389).
  • gobgp - BGP implemented in the Go Programming Language.
  • golibwireshark - Package golibwireshark use libwireshark library to decode pcap file and analyse dissection data.
  • gopacket - Go library for packet processing with libpcap bindings.
  • gopcap - Go wrapper for libpcap.
  • goshark - Package goshark use tshark to decode IP packet and create data struct to analyse packet.
  • gosnmp - Native Go library for performing SNMP actions.
  • gotcp - Go package for quickly writing tcp applications.
  • grab - Go package for managing file downloads.
  • graval - Experimental FTP server framework.
  • jazigo - Jazigo is a tool written in Go for retrieving configuration for multiple network devices.
  • kcp-go - KCP - Fast and Reliable ARQ Protocol.
  • kcptun - Extremely simple & fast udp tunnel based on KCP protocol.
  • lhttp - Powerful websocket framework, build your IM server more easily.
  • linkio - Network link speed simulation for Reader/Writer interfaces.
  • llb - It's a very simple but quick backend for proxy servers. Can be useful for fast redirection to predefined domain with zero memory allocation and fast response.
  • mdns - Simple mDNS (Multicast DNS) client/server library in Golang.
  • mqttPaho - The Paho Go Client provides an MQTT client library for connection to MQTT brokers via TCP, TLS or WebSockets.
  • portproxy - Simple TCP proxy which adds CORS support to API's which don't support it.
  • publicip - Package publicip returns your public facing IPv4 address (internet egress).
  • raw - Package raw enables reading and writing data at the device driver level for a network interface.
  • sftp - Package sftp implements the SSH File Transfer Protocol as described in https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt.
  • ssh - Higher-level API for building SSH servers (wraps crypto/ssh).
  • sslb - It's a Super Simples Load Balancer, just a little project to achieve some kind of performance.
  • stun - Go implementation of RFC 5389 STUN protocol.
  • tcp_server - Go library for building tcp servers faster.
  • utp - Go uTP micro transport protocol implementation.
  • water - Simple TUN/TAP library.
  • winrm - Go WinRM client to remotely execute commands on Windows machines.
  • xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol.
  • YANNFF - Framework for rapid development of performant network functions for cloud and bare-metal.

OpenGL

Libraries for using OpenGL in Go.

  • gl - Go bindings for OpenGL (generated via glow).
  • glfw - Go bindings for GLFW 3.
  • goxjs/gl - Go cross-platform OpenGL bindings (OS X, Linux, Windows, browsers, iOS, Android).
  • goxjs/glfw - Go cross-platform glfw library for creating an OpenGL context and receiving events.
  • mathgl - Pure Go math package specialized for 3D math, with inspiration from GLM.

ORM

Libraries that implement Object-Relational Mapping or datamapping techniques.

  • beego orm - Powerful orm framework for go. Support: pq/mysql/sqlite3.
  • go-pg - PostgreSQL ORM with focus on PostgreSQL specific features and performance.
  • go-queryset - 100% type-safe ORM with code generation and MySQL, PostgreSQL, Sqlite3, SQL Server support based on GORM.
  • go-sqlbuilder - A flexible and powerful SQL string builder library plus a zero-config ORM.
  • go-store - Simple and fast Redis backed key-value store library for Go.
  • gomodel - Lightweight, fast, orm-like library helps interactive with database.
  • GORM - The fantastic ORM library for Golang, aims to be developer friendly.
  • gorp - Go Relational Persistence, ORM-ish library for Go.
  • lore - Simple and lightweight pseudo-ORM/pseudo-struct-mapping environment for Go.
  • Marlow - Generated ORM from project structs for compile time safety assurances.
  • pop/soda - Database migration, creation, ORM, etc... for MySQL, PostgreSQL, and SQLite.
  • QBS - Stands for Query By Struct. A Go ORM.
  • reform - Better ORM for Go, based on non-empty interfaces and code generation.
  • SQLBoiler - ORM generator. Generate a featureful and blazing-fast ORM tailored to your database schema.
  • upper.io/db - Single interface for interacting with different data sources through the use of adapters that wrap mature database drivers.
  • Xorm - Simple and powerful ORM for Go.
  • Zoom - Blazing-fast datastore and querying engine built on Redis.

Package Management

Libraries for package and dependency management.

  • dep - Go dependency tool.
  • gigo - PIP-like dependency tool for golang, with support for private repositories and hashes.
  • glide - Manage your golang vendor and vendored packages with ease. Inspired by tools like Maven, Bundler, and Pip.
  • godep - dependency tool for go, godep helps build packages reproducibly by fixing their dependencies.
  • gom - Go Manager - bundle for go.
  • goop - Simple dependency manager for Go (golang), inspired by Bundler.
  • gop - Build and manage your Go applications out of GOPATH
  • gopm - Go Package Manager.
  • govendor - Go Package Manager. Go vendor tool that works with the standard vendor file.
  • gpm - Barebones dependency manager for Go.
  • gvt - gvt is a simple vendoring tool made for Go native vendoring (aka GO15VENDOREXPERIMENT), based on gb-vendor.
  • johnny-deps - Minimal dependency version using Git.
  • nut - Vendor Go dependencies.
  • VenGO - create and manage exportable isolated go virtual environments.

Query Language

  • graphql - graphql parser + utilities.
  • graphql - GraphQL implementation in go.
  • graphql - GraphQL server with a focus on ease of use.
  • graphql-go - Implementation of GraphQL for Go.
  • jsonql - JSON query expression library in Golang.

Resource Embedding

  • esc - Embeds files into Go programs and provides http.FileSystem interfaces to them.
  • fileb0x - Simple tool to embed files in go with focus on "customization" and ease to use.
  • go-embed - Generates go code to embed resource files into your library or executable.
  • go-resources - Unfancy resources embedding with Go.
  • go.rice - go.rice is a Go package that makes working with resources such as html,js,css,images and templates very easy.
  • statics - Embeds static resources into go files for single binary compilation + works with http.FileSystem + symlinks.
  • statik - Embeds static files into a Go executable.
  • templify - Embed external template files into Go code to create single file binaries.
  • vfsgen - Generates a vfsdata.go file that statically implements the given virtual filesystem.

Science and Data Analysis

Libraries for scientific computing and data analyzing.

  • blas - Implementation of BLAS (Basic Linear Algebra Subprograms).
  • chart - Simple Chart Plotting library for Go. Supports many graphs types.
  • evaler - Simple floating point arithmetic expression evaluator.
  • ewma - Exponentially-weighted moving averages.
  • geom - 2D geometry for golang.
  • go-dsp - Digital Signal Processing for Go.
  • go-fn - Mathematical functions written in Go language, that are not covered by math pkg.
  • go-gt - Graph theory algorithms written in "Go" language.
  • go.matrix - linear algebra for go (has been stalled).
  • gocomplex - Complex number library for the Go programming language.
  • goent - GO Implementation of Entropy Measures
  • gofrac - (goinstallable) fractions library for go with support for basic arithmetic.
  • gohistogram - Approximate histograms for data streams.
  • gonum/mat64 - The general purpose package for matrix computation. Package mat64 provides basic linear algebra operations for float64 matrices.
  • gonum/plot - gonum/plot provides an API for building and drawing plots in Go.
  • goraph - Pure Go graph theory library(data structure, algorith visualization).
  • gosl - Go scientific library for linear algebra, FFT, geometry, NURBS, numerical methods, probabilities, optimisation, differential equations, and more.
  • gostat - Statistics library for the go language.
  • graph - Library of basic graph algorithms.
  • ode - Ordinary differential equation (ODE) solver which supports extended states and channel-based iteration stop conditions.
  • pagerank - Weighted PageRank algorithm implemented in Go.
  • PiHex - Implementation of the "Bailey-Borwein-Plouffe" algorithm for the hexadecimal number Pi.
  • sparse - Go Sparse matrix formats for linear algebra supporting scientific and machine learning applications, compatible with gonum matrix libraries.
  • stats - Statistics package with common functions missing from the Golang standard library.
  • streamtools - general purpose, graphical tool for dealing with streams of data.
  • vectormath - Vectormath for Go, an adaptation of the scalar C functions from Sony's Vector Math library, as found in the Bullet-2.79 source code (currently inactive).

Security

Libraries that are used to help make your application more secure.

  • acmetool - ACME (Let's Encrypt) client tool with automatic renewal.
  • autocert - Auto provision Let's Encrypt certificates and start a TLS server.
  • BadActor - In-memory, application-driven jailer built in the spirit of fail2ban.
  • Cameradar - Tool and library to remotely hack RTSP streams from surveillance cameras.
  • go-yara - Go Bindings for YARA, the "pattern matching swiss knife for malware researchers (and everyone else)".
  • goSecretBoxPassword - A probably paranoid package for securely hashing and encrypting passwords.
  • lego - Pure Go ACME client library and CLI tool (for use with Let's Encrypt).
  • memguard - A pure Go library for handling sensitive values in memory.
  • nacl - Go implementation of the NaCL set of API's.
  • passlib - Futureproof password hashing library.
  • secure - HTTP middleware for Go that facilitates some quick security wins.
  • simple-scrypt - Scrypt package with a simple, obvious API and automatic cost calibration built-in.
  • ssh-vault - encrypt/decrypt using ssh keys.

Serialization

Libraries and tools for binary serialization.

  • asn1 - Asn.1 BER and DER encoding library for golang.
  • bambam - generator for Cap'n Proto schemas from go.
  • colfer - Code generation for the Colfer binary format.
  • csvutil - High Performance, idiomatic CSV record encoding and decoding to native Go structures.
  • fwencoder - Fixed width file parser (encoding and decoding library) for Go.
  • go-capnproto - Cap'n Proto library and parser for go.
  • go-codec - High Performance, feature-Rich, idiomatic encode, decode and rpc library for msgpack, cbor and json, with runtime-based OR code-generation support.
  • gogoprotobuf - Protocol Buffers for Go with Gadgets.
  • goprotobuf - Go support, in the form of a library and protocol compiler plugin, for Google's protocol buffers.
  • jsoniter - High-performance 100% compatible drop-in replacement of "encoding/json".
  • mapstructure - Go library for decoding generic map values into native Go structures.
  • php_session_decoder - GoLang library for working with PHP session format and PHP Serialize/Unserialize functions.
  • structomap - Library to easily and dynamically generate maps from static structures.

Server Applications

  • algernon - HTTP/2 web server with built-in support for Lua, Markdown, GCSS and Amber.
  • Caddy - Caddy is an alternative, HTTP/2 web server that's easy to configure and use.
  • consul - Consul is a tool for service discovery, monitoring and configuration.
  • devd - Local webserver for developers.
  • etcd - Highly-available key value store for shared configuration and service discovery.
  • Fider - Fider is an open platform to collect and organize customer feedback.
  • minio - Minio is a distributed object storage server.
  • nsq - A realtime distributed messaging platform.
  • yakvs - Small, networked, in-memory key-value store.

Template Engines

Libraries and tools for templating and lexing.

  • ace - Ace is an HTML template engine for Go, inspired by Slim and Jade. Ace is a refinement of Gold.
  • amber - Amber is an elegant templating engine for Go Programming Language It is inspired from HAML and Jade.
  • damsel - Markup language featuring html outlining via css-selectors, extensible via pkg html/template and others.
  • ego - Lightweight templating language that lets you write templates in Go. Templates are translated into Go and compiled.
  • fasttemplate - Simple and fast template engine. Substitutes template placeholders up to 10x faster than text/template.
  • gofpdf - PDF document generator with high level support for text, drawing and images.
  • grender - small wrapper around html/template for file-based templates that support extending other template files.
  • hero - Hero is a handy, fast and powerful go template engine.
  • jet - Jet template engine.
  • kasia.go - Templating system for HTML and other text documents - go implementation.
  • liquid - Go implementation of Shopify Liquid templates.
  • mustache - Go implementation of the Mustache template language.
  • pongo2 - Django-like template-engine for Go.
  • quicktemplate - Fast, powerful, yet easy to use template engine. Converts templates into Go code and then compiles it.
  • raymond - Complete handlebars implementation in Go.
  • Razor - Razor view engine for Golang.
  • Soy - Closure templates (aka Soy templates) for Go, following the official spec.
  • velvet - Complete handlebars implementation in Go.

Testing

Libraries for testing codebases and generating test data.

  • Testing Frameworks

    • assert - Basic Assertion Library used along side native go testing, with building blocks for custom assertions.
    • badio - Extensions to Go's testing/iotest package.
    • baloo - Expressive and versatile end-to-end HTTP API testing made easy.
    • bro - Watch files in directory and run tests for them.
    • cupaloy - Simple snapshot testing addon for your test framework.
    • dbcleaner - Clean database for testing purpose, inspired by database_cleaner in Ruby.
    • dsunit - Datastore testing for SQL, NoSQL, structured files.
    • endly - Declarative end to end functional testing.
    • frisby - REST API testing framework.
    • ginkgo - BDD Testing Framework for Go.
    • go-carpet - Tool for viewing test coverage in terminal.
    • go-mutesting - Mutation testing for Go source code.
    • go-vcr - Record and replay your HTTP interactions for fast, deterministic and accurate tests.
    • goblin - Mocha like testing framework fo Go.
    • gocheck - More advanced testing framework alternative to gotest.
    • GoConvey - BDD-style framework with web UI and live reload.
    • gocrest - Composable hamcrest-like matchers for Go assertions.
    • godog - Cucumber or Behat like BDD framework for Go.
    • gofight - API Handler Testing for Golang Router framework.
    • gogiven - YATSPEC-like BDD testing framework for Go.
    • gomega - Rspec like matcher/assertion library.
    • GoSpec - BDD-style testing framework for the Go programming language.
    • gospecify - This provides a BDD syntax for testing your Go code. It should be familiar to anybody who has used libraries such as rspec.
    • gosuite - Brings lightweight test suites with setup/teardown facilities to testing by leveraging Go1.7's Subtests.
    • Hamcrest - fluent framework for declarative Matcher objects that, when applied to input values, produce self-describing results.
    • httpexpect - Concise, declarative, and easy to use end-to-end HTTP and REST API testing.
    • restit - Go micro framework to help writing RESTful API integration test.
    • testfixtures - A helper for Rails' like test fixtures to test database applications.
    • Testify - Sacred extension to the standard go testing package.
    • wstest - Websocket client for unit-testing a websocket http.Handler.
  • Mock

    • counterfeiter - Tool for generating self-contained mock objects.
    • go-sqlmock - Mock SQL driver for testing database interactions.
    • go-txdb - Single transaction based database driver mainly for testing purposes.
    • gock - Versatile HTTP mocking made easy.
    • gomock - Mocking framework for the Go programming language.
    • govcr - HTTP mock for Golang: record and replay HTTP interactions for offline testing.
    • minimock - Mock generator for Go interfaces.
    • mockhttp - Mock object for Go http.ResponseWriter.
  • Fuzzing and delta-debugging/reducing/shrinking.

    • go-fuzz - Randomized testing system.
    • gofuzz - Library for populating go objects with random values.
    • Tavor - Generic fuzzing and delta-debugging framework.
  • Selenium and browser control tools.

    • cdp - Type-safe bindings for the Chrome Debugging Protocol that can be used with browsers or other debug targets that implement it.
    • chromedp - Way to drive/test Chrome, Safari, Edge, Android Webviews, and other browsers supporting the Chrome Debugging Protocol.
    • ggr - Lightweight server that routes and proxies Selenium Wedriver requests to multiple Selenium hubs.
    • selenoid - alternative Selenium hub server that launches browsers within containers.

Text Processing

Libraries for parsing and manipulating texts.

  • Specific Formats
    • align - A general purpose application that aligns text.
    • allot - Placeholder and wildcard text parsing for CLI tools and bots.
    • bbConvert - Converts bbCode to HTML that allows you to add support for custom bbCode tags.
    • blackfriday - Markdown processor in Go.
    • bluemonday - HTML Sanitizer.
    • colly - Fast and Elegant Scraping Framework for Gophers
    • doi - Document object identifier (doi) parser in Go.
    • editorconfig-core-go - Editorconfig file parser and manipulator for Go.
    • enca - Minimal cgo bindings for libenca.
    • genex - Count and expand Regular Expressions into all matching Strings.
    • github_flavored_markdown - GitHub Flavored Markdown renderer (using blackfriday) with fenced code block highlighting, clickable header anchor links.
    • go-fixedwidth - Fixed-width text formatting (encoder/decoder with reflection).
    • go-humanize - Formatters for time, numbers, and memory size to human readable format.
    • go-nmea - NMEA parser library for the Go language.
    • go-runewidth - Functions to get fixed width of the character or string.
    • go-slugify - Make pretty slug with multiple languages support.
    • go-vcard - Parse and format vCard.
    • gofeed - Parse RSS and Atom feeds in Go.
    • gographviz - Parses the Graphviz DOT language.
    • gommon/bytes - Format bytes to string.
    • gonameparts - Parses human names into individual name parts.
    • goq - Declarative unmarshaling of HTML using struct tags with jQuery syntax (uses GoQuery).
    • GoQuery - GoQuery brings a syntax and a set of features similar to jQuery to the Go language.
    • goregen - Library for generating random strings from regular expressions.
    • gotext - GNU gettext utilities for Go.
    • guesslanguage - Functions to determine the natural language of a unicode text.
    • inject - Package inject provides a reflect based injector.
    • mxj - Encode / decode XML as JSON or map[string]interface{}; extract values with dot-notation paths and wildcards. Replaces x2j and j2x packages.
    • sh - Shell parser and formatter.
    • slug - URL-friendly slugify with multiple languages support.
    • Slugify - Go slugify application that handles string.
    • toml - TOML configuration format (encoder/decoder with reflection).
  • Utility
    • gotabulate - Easily pretty-print your tabular data with Go.
    • kace - Common case conversions covering common initialisms.
    • parseargs-go - string argument parser that understands quotes and backslashes.
    • parth - URL path segmentation parsing.
    • radix - fast string sorting algorithm.
    • xj2go - Convert xml or json to go struct.
    • xurls - Extract urls from text.

Third-party APIs

Libraries for accessing third party APIs.

Utilities

General utilities and tools to make your life easier.

  • abutil - Collection of often-used Golang helpers.
  • apm - Process manager for Golang applications with an HTTP API.
  • backscanner - A scanner similar to bufio.Scanner, but it reads and returns lines in reverse order, starting at a given position and going backward.
  • boilr - Blazingly fast CLI tool for creating projects from boilerplate templates.
  • chyle - Changelog generator using a git repository with multiple configuration possibilities.
  • circuit - An efficient and feature complete Hystrix like Go implementation of the circuit breaker pattern.
  • circuitbreaker - Circuit Breakers in Go.
  • clockwerk - Go package to schedule periodic jobs using a simple, fluent syntax.
  • command - Command pattern for Go with thread safe serial and parallel dispatcher.
  • coop - Cheat sheet for some of the common concurrent flows in Go.
  • copy-pasta - Universal multi-workstation clipboard that uses S3 like backend for the storage.
  • ctop - Top-like interface (e.g. htop) for container metrics.
  • Death - Managing go application shutdown with signals.
  • Deepcopier - Simple struct copying for Go.
  • delve - Go debugger.
  • dlog - Compile-time controlled logger to make your release smaller without removing debug calls.
  • ergo - The management of multiple local services running over different ports made easy.
  • evaluator - Evaluate an expression dynamicly based on s-expression. It's simple and easy to extend.
  • excelize - Golang library for reading and writing Microsoft Excel™ (XLSX) files.
  • fastlz - Wrap over FastLz (free, open-source, portable real-time compression library) for GoLang.
  • filetype - Small package to infer the file type checking the magic numbers signature.
  • filler - small utility to fill structs using "fill" tag.
  • fzf - Command-line fuzzy finder written in Go.
  • generate - runs go generate recursively on a specified path or environment variable and can filter by regex.
  • gentleman - Full-featured plugin-driven HTTP client library.
  • git-time-metric - Simple, seamless, lightweight time tracking for Git.
  • GJSON - Get a JSON value with one line of code.
  • go-astitodo - Parse TODOs in your GO code.
  • go-bind-plugin - go:generate tool for wrapping symbols exported by golang plugins (1.8 only).
  • go-cron - Simple Cron library for go that can execute closures or functions at varying intervals, from once a second to once a year on a specific date and time. Primarily for web applications and long running daemons.
  • go-debug - Conditional debug logging for Golang libraries & applications.
  • go-dry - DRY (don't repeat yourself) package for Go.
  • go-funk - Modern Go utility library which provides helpers (map, find, contains, filter, chunk, reverse, ...).
  • go-httpheader - Go library for encoding structs into Header fields.
  • go-rate - Timed rate limiter for Go.
  • go-respond - Go package for handling common HTTP JSON responses.
  • go-sitemap-generator - XML Sitemap generator written in Go.
  • go-torch - Stochastic flame graph profiler for Go programs.
  • go-trigger - Go-lang global event triggerer, Register Events with an id and trigger the event from anywhere from your project.
  • go-underscore - Useful collection of helpfully functional Go collection utilities.
  • goback - Go simple exponential backoff package.
  • godaemon - Utility to write daemons.
  • godropbox - Common libraries for writing Go services/applications from Dropbox.
  • gohper - Various tools/modules help for development.
  • gojq - JSON query in Golang.
  • gojson - Automatically generate Go (golang) struct definitions from example JSON.
  • golarm - Fire alarms with system events.
  • golog - Easy and lightweight CLI tool to time track your tasks.
  • gopencils - Small and simple package to easily consume REST APIs.
  • goplaceholder - a small golang lib to generate placeholder images.
  • goreleaser - Deliver Go binaries as fast and easily as possible.
  • goreporter - Golang tool that does static analysis, unit testing, code review and generate code quality report.
  • goreq - Minimal and simple request library for Go language.
  • goreq - Enhanced simplified HTTP client based on gorequest.
  • gorequest - Simplified HTTP client with rich features for Go.
  • goseaweedfs - SeaweedFS client library with almost full features.
  • gotenv - Load environment variables from .env or any io.Reader in Go.
  • goxlsxwriter - Golang bindings for libxlsxwriter for writing XLSX (Microsoft Excel) files.
  • gpath - Library to simplify access struct fields with Go's expression in reflection.
  • grequests - Elegant and simple net/http wrapper that follows Python's requests library.
  • gron - Define time-based tasks using a simple Go API and Gron’s scheduler will run them accordingly.
  • htcat - Parallel and Pipelined HTTP GET Utility.
  • httpcontrol - Package httpcontrol allows for HTTP transport level control around timeouts and retries.
  • hub - wrap git commands with additional functionality to interact with github from the terminal.
  • hystrix-go - Implements Hystrix patterns of programmer-defined fallbacks aka circuit breaker.
  • immortal - *nix cross-platform (OS agnostic) supervisor.
  • intrinsic - Use x86 SIMD without writing any assembly code.
  • JobRunner - Smart and featureful cron job scheduler with job queuing and live monitoring built in.
  • jsonapi-errors - Go bindings based on the JSON API errors reference.
  • jsonf - Console tool for highlighted formatting and struct query fetching JSON.
  • jsongo - Fluent API to make it easier to create Json objects.
  • jsonhal - Simple Go package to make custom structs marshal into HAL compatible JSON responses.
  • kazaam - API for arbitrary transformation of JSON documents.
  • lrserver - LiveReload server for Go.
  • mc - Minio Client provides minimal tools to work with Amazon S3 compatible cloud storage and filesystems.
  • mergo - Helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.
  • minify - Fast minifiers for HTML, CSS, JS, XML, JSON and SVG file formats.
  • minquery - MongoDB / mgo.v2 query that supports efficient pagination (cursors to continue listing documents where we left off).
  • mmake - Modern Make.
  • moldova - Utility for generating random data based on an input template.
  • mp - Simple cli email parser. It currently takes stdin and outputs JSON.
  • mssqlx - Database client library, proxy for any master slave, master master structures. Lightweight and auto balancing in mind.
  • multitick - Multiplexor for aligned tickers.
  • myhttp - Simple API to make HTTP GET requests with timeout support.
  • netbug - Easy remote profiling of your services.
  • ngrok - Introspected tunnels to localhost.
  • okrun - go run error steamroller.
  • onecache - Caching library with support for multiple backend stores (Redis, Memcached, filesystem etc).
  • panicparse - Groups similar goroutines and colorizes stack dump.
  • peco - Simplistic interactive filtering tool.
  • pester - Go HTTP client calls with retries, backoff, and concurrency.
  • pm - Process (i.e. goroutine) manager with an HTTP API.
  • profile - Simple profiling support package for Go.
  • rclient - Readable, flexible, simple-to-use client for REST APIs.
  • realize - Go build system with file watchers and live reload. Run, build and watch file changes with custom paths.
  • repeat - Go implementation of different backoff strategies useful for retrying operations and heartbeating.
  • request - Go HTTP Requests for Humans™.
  • rerate - Redis-based rate counter and rate limiter for Go.
  • rerun - Recompiling and rerunning go apps when source changes.
  • resty - Simple HTTP and REST client for Go inspired by Ruby rest-client.
  • retry - Functional mechanism based on context to perform actions repetitively until successful.
  • retry-go - Retrying made simple and easy for golang.
  • robustly - Runs functions resiliently, catching and restarting panics.
  • rq - A nicer interface for golang stdlib HTTP client.
  • scheduler - Cronjobs scheduling made easy.
  • sling - Go HTTP requests builder for API clients.
  • spinner - Go package to easily provide a terminal spinner with options.
  • sqlx - provides a set of extensions on top of the excellent built-in database/sql package.
  • Storm - Simple and powerful toolkit for BoltDB.
  • structs - Implement simple functions to manipulate structs.
  • Task - simple "Make" alternative.
  • toolbox - Slice, map, multimap, struct, function, data conversion utilities. Service router, macro evaluator, tokenizer.
  • ugo - ugo is slice toolbox with concise syntax for Go.
  • UNIS - Common Architecture™ for String Utilities in Go.
  • usql - usql is a universal command-line interface for SQL databases.
  • util - Collection of useful utility functions. (strings, concurrency, manipulations, ...).
  • wuzz - Interactive cli tool for HTTP inspection.
  • xferspdy - Xferspdy provides binary diff and patch library in golang.
  • xlsx - Library to simplify reading the XML format used by recent version of Microsoft Excel in Go programs.

Validation

Libraries for validation.

  • govalidator - Validators and sanitizers for strings, numerics, slices and structs.
  • govalidator - Validate Golang request data with simple rules. Highly inspired by Laravel's request validation.
  • ozzo-validation - Supports validation of various data types (structs, strings, maps, slices, etc.) with configurable and extensible validation rules specified in usual code constructs instead of struct tags.
  • validate - This package provides a framework for writing validations for Go applications.
  • validator - Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving.

Version Control

Libraries for version control.

  • gh - Scriptable server and net/http middleware for GitHub Webhooks.
  • git2go - Go bindings for libgit2.
  • go-vcs - manipulate and inspect VCS repositories in Go.
  • hgo - Hgo is a collection of Go packages providing read-access to local Mercurial repositories.

Video

Libraries for manipulating video.

  • gmf - Go bindings for FFmpeg av* libraries.
  • go-astisub - Manipulate subtitles in GO (.srt, .stl, .ttml, .webvtt, .ssa/.ass, teletext, .smi, etc.).
  • go-astits - Parse and demux MPEG Transport Streams (.ts) natively in GO.
  • goav - Comphrensive Go bindings for FFmpeg.
  • gst - Go bindings for GStreamer.
  • libgosubs - Subtitle format support for go. Supports .srt, .ttml, and .ass.
  • v4l - Video capture library for Linux, written in Go.

Web Frameworks

Full stack web frameworks.

  • aah - Scalable, performant, rapid development Web framework for Go.
  • Air - Ideal RESTful web framework for Go.
  • Banjo - Very simple and fast web framework for Go.
  • Beego - beego is an open-source, high-performance web framework for the Go programming language.
  • Buffalo - Bringing the productivity of Rails to Go!
  • Echo - High performance, minimalist Go web framework.
  • Fireball - More "natural" feeling web framework.
  • Florest - High-performance workflow based REST API framework.
  • Gem - Simple and fast web framework, friendly to REST API.
  • Gin - Gin is a web framework written in Go! It features a martini-like API with much better performance, up to 40 times faster. If you need performance and good productivity.
  • Gizmo - Microservice toolkit used by the New York Times.
  • go-json-rest - Quick and easy way to setup a RESTful JSON API.
  • go-relax - Framework of pluggable components to build RESTful API's.
  • go-rest - Small and evil REST framework for Go.
  • goa - Framework for developing microservices based on the design of Ruby's Praxis.
  • Goat - Minimalistic REST API server in Go.
  • Golf - Golf is a fast, simple and lightweight micro-web framework for Go. It comes with powerful features and has no dependencies other than the Go Standard Library.
  • Gondola - The web framework for writing faster sites, faster.
  • gongular - Fast Go web framework with input mapping/validation and (DI) Dependency Injection.
  • Macaron - Macaron is a high productive and modular design web framework in Go.
  • mango - Mango is a modular web-application framework for Go, inspired by Rack, and PEP333.
  • Microservice - The framework for the creation of microservices, written in Golang.
  • neo - Neo is minimal and fast Go Web Framework with extremely simple API.
  • Resoursea - REST framework for quickly writing resource based services.
  • REST Layer - Framework to build REST/GraphQL API on top of databases with mostly configuration over code.
  • Revel - High-productivity web framework for the Go language.
  • rex - Rex is a library for modular development built upon gorilla/mux, fully compatible with net/http.
  • sawsij - lightweight, open-source web framework for building high-performance, data-driven web applications.
  • tango - Micro & pluggable web framework for Go.
  • tigertonic - Go framework for building JSON web services inspired by Dropwizard.
  • traffic - Sinatra inspired regexp/pattern mux and web framework for Go.
  • utron - Lightweight MVC framework for Go(Golang).
  • violetear - Go HTTP router.
  • YARF - Fast micro-framework designed to build REST APIs and web services in a fast and simple way.
  • Zerver - Zerver is an expressive, modular, feature completed RESTful framework.

Middlewares

Actual middlewares

  • CORS - Easily add CORS capabilities to your API.
  • formjson - Transparently handle JSON input as a standard form POST.
  • Limiter - Dead simple rate limit middleware for Go.
  • Tollbooth - Rate limit HTTP request handler.
  • XFF - Handle X-Forwarded-For header and friends.

Libraries for creating HTTP middlewares

  • alice - Painless middleware chaining for Go.
  • catena - http.Handler wrapper catenation (same API as "chain").
  • chain - Handler wrapper chaining with scoped data (net/context-based "middleware").
  • go-wrap - Small middlewares package for net/http.
  • gores - Go package that handles HTML, JSON, XML and etc. responses. Useful for RESTful APIs.
  • interpose - Minimalist net/http middleware for golang.
  • muxchain - Lightweight middleware for net/http.
  • negroni - Idiomatic HTTP middleware for Golang.
  • render - Go package for easily rendering JSON, XML, and HTML template responses.
  • renderer - Simple, lightweight and faster response (JSON, JSONP, XML, YAML, HTML, File) rendering package for Go.
  • rye - Tiny Go middleware library (with canned Middlewares) that supports JWT, CORS, Statsd, and Go 1.7 context.
  • stats - Go middleware that stores various information about your web application.
  • Volatile - Minimalist middleware stack promoting flexibility, good practices and clean code.

Routers

  • alien - Lightweight and fast http router from outer space.
  • Bone - Lightning Fast HTTP Multiplexer.
  • Bxog - Simple and fast HTTP router for Go. It works with routes of varying difficulty, length and nesting. And he knows how to create a URL from the received parameters.
  • chi - Small, fast and expressive HTTP router built on net/context.
  • fasthttprouter - High performance router forked from httprouter. The first router fit for fasthttp.
  • FastRouter - a fast, flexible HTTP router written in Go.
  • gocraft/web - Mux and middleware package in Go.
  • Goji - Goji is a minimalistic and flexible HTTP request multiplexer with support for net/context.
  • GoRouter - GoRouter is a Server/API micro framwework, HTTP request router, multiplexer, mux that provides request router with middleware supporting net/context.
  • gowww/router - Lightning fast HTTP router fully compatible with the net/http.Handler interface.
  • httprouter - High performance router. Use this and the standard http handlers to form a very high performance web framework.
  • httptreemux - High-speed, flexible tree-based HTTP router for Go. Inspiration from httprouter.
  • lars - Is a lightweight, fast and extensible zero allocation HTTP router for Go used to create customizable frameworks.
  • medeina - Medeina is a HTTP routing tree based on HttpRouter, inspired by Roda and Cuba.
  • mux - Powerful URL router and dispatcher for golang.
  • ozzo-routing - An extremely fast Go (golang) HTTP router that supports regular expression route matching. Comes with full support for building RESTful APIs.
  • pat - Sinatra style pattern muxer for Go’s net/http library, by the author of Sinatra.
  • pure - Is a lightweight HTTP router that sticks to the std "net/http" implementation.
  • Siesta - Composable framework to write middleware and handlers.
  • vestigo - Performant, stand-alone, HTTP compliant URL Router for go web applications.
  • xmux - High performance muxer based on httprouter with net/context support.
  • zeus - Very simple and fast HTTP router for Go.

Windows

  • d3d9 - Go bindings for Direct3D9.
  • go-ole - Win32 OLE implementation for golang.

XML

Libraries and tools for manipulating XML.

  • XML-Comp - Simple command line XML comparer that generates diffs of folders, files and tags.
  • xmlwriter - Procedural XML generation API based on libxml2's xmlwriter module.
  • xpath - XPath package for Go.
  • xquery - XQuery lets you extract data from HTML/XML documents using XPath expression.

Tools

Go software and plugins.

Code Analysis

  • apicompat - Checks recent changes to a Go project for backwards incompatible changes.
  • dupl - Tool for code clone detection.
  • errcheck - Errcheck is a program for checking for unchecked errors in Go programs.
  • gcvis - Visualise Go program GC trace data in real time.
  • Go Metalinter - Metalinter is a tool to automatically apply all static analysis tool and report their output in normalized form.
  • go-checkstyle - checkstyle is a style check tool like java checkstyle. This tool inspired by java checkstyle, golint. The style refered to some points in Go Code Review Comments.
  • go-cleanarch - go-cleanarch was created to validate Clean Architecture rules, like a The Dependency Rule and interaction between packages in your Go projects.
  • go-outdated - Console application that displays outdated packages.
  • goast-viewer - Web based Golang AST visualizer.
  • GoCover.io - GoCover.io offers the code coverage of any golang package as a service.
  • goimports - Tool to fix (add, remove) your Go imports automatically.
  • GoLint - Golint is a linter for Go source code.
  • Golint online - Lints online Go source files on GitHub, Bitbucket and Google Project Hosting using the golint package.
  • goreturns - Adds zero-value return statements to match the func return types.
  • gosimple - gosimple is a linter for Go source code that specialises on simplifying code.
  • gostatus - Command line tool, shows the status of repositories that contain Go packages.
  • interfacer - Linter that suggests interface types.
  • lint - Run linters as part of go test.
  • staticcheck - staticcheck is go vet on steroids, applying a ton of static analysis checks you might be used to from tools like ReSharper for C#.
  • tarp - tarp finds functions and methods without direct unit tests in Go source code.
  • unconvert - Remove unnecessary type conversions from Go source.
  • unused - unused checks Go code for unused constants, variables, functions and types.
  • validate - Automatically validates struct fields with tags.

Editor Plugins

  • Go plugin for JetBrains IDEs - Go plugin for JetBrains IDEs.
  • go-language-server - A wrapper to turn the VSCode go extension into a language server supporting the language-server-protocol.
  • go-mode - Go mode for GNU/Emacs.
  • go-plus - Go (Golang) Package For Atom That Adds Autocomplete, Formatting, Syntax Checking, Linting and Vetting.
  • Goclipse - Eclipse plugin for Go.
  • gocode - Autocompletion daemon for the Go programming language.
  • GoSublime - Golang plugin collection for the text editor SublimeText 3 providing code completion and other IDE-like features.
  • theia-go-extension - Go language support for the Theia IDE.
  • velour - IRC client for the acme editor.
  • vim-compiler-go - Vim plugin to highlight syntax errors on save.
  • vim-go - Go development plugin for Vim.
  • vscode-go - Extension for Visual Studio Code (VS Code) which provides support for the Go language.
  • Watch - Runs a command in an acme win on file changes.

Go Generate Tools

  • generic - flexible data type for Go.
  • genny - Elegant generics for Go.
  • gonerics - Idiomatic Generics in Go.
  • gotests - Generate Go tests from your source code.
  • re2dfa - Transform regular expressions into finite state machines and output Go source code.

Go Tools

  • colorgo - Wrapper around go command for colorized go build output.
  • depth - Visualize dependency trees of any package by analyzing imports.
  • gb - An easy to use project based build tool for the Go programming language.
  • generator-go-lang - A Yeoman generator to get new Go projects started.
  • go-callvis - Visualize call graph of your Go program using dot format.
  • go-pkg-complete - Bash completion for go and wgo.
  • go-swagger - Swagger 2.0 implementation for go. Swagger is a simple yet powerful representation of your RESTful API.
  • OctoLinker - Navigate through go files efficiently with the OctoLinker browser extension for GitHub.
  • richgo - Enrich go test outputs with text decorations.
  • rts - RTS: response to struct. Generates Go structs from server responses.

Software Packages

Software written in Go.

DevOps Tools

  • aptly - aptly is a Debian repository management tool.
  • aurora - Cross-platform web-based Beanstalkd queue server console.
  • awsenv - Small binary that loads Amazon (AWS) environment variables for a profile.
  • Banshee - Anomalies detection system for periodic metrics.
  • Blast - A simple tool for API load testing and batch jobs.
  • bombardier - Fast cross-platform HTTP benchmarking tool.
  • bosun - Time Series Alerting Framework.
  • dogo - Monitoring changes in the source file and automatically compile and run (restart).
  • drone-jenkins - Trigger downstream Jenkins jobs using a binary, docker or Drone CI.
  • drone-scp - Copy files and artifacts via SSH using a binary, docker or Drone CI.
  • Dropship - Tool for deploying code via cdn.
  • easyssh-proxy - Golang package for easy remote execution through SSH and SCP downloading via ProxyCommand.
  • Gitea - Fork of Gogs, entirely community driven.
  • Go Metrics - Go port of Coda Hale's Metrics library: https://github.com/codahale/metrics.
  • go-selfupdate - Enable your Go applications to self update.
  • gobrew - gobrew lets you easily switch between multiple versions of go.
  • godbg - Web-based gdb front-end application.
  • Gogs - A Self Hosted Git Service in the Go Programming Language.
  • gonative - Tool which creates a build of Go that can cross compile to all platforms while still using the Cgo-enabled versions of the stdlib packages.
  • govvv - “go build” wrapper to easily add version information into Go binaries.
  • gox - Dead simple, no frills Go cross compile tool.
  • goxc - build tool for Go, with a focus on cross-compiling and packaging.
  • grapes - Lightweight tool designed to distribute commands over ssh with ease.
  • GVM - GVM provides an interface to manage Go versions.
  • Hey - Hey is a tiny program that sends some load to a web application.
  • kala - Simplistic, modern, and performant job scheduler.
  • kcli - Command line tool for inspecting kafka topics/partitions/messages.
  • kubernetes - Container Cluster Manager from Google.
  • manssh - manssh is a command line tool for managing your ssh alias config easily.
  • Moby - Collaborative project for the container ecosystem to assemble container-based systems.
  • Mora - REST server for accessing MongoDB documents and meta data.
  • ostent - collects and displays system metrics and optionally relays to Graphite and/or InfluxDB.
  • Packer - Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
  • Pewpew - Flexible HTTP command line stress tester.
  • Rodent - Rodent helps you manage Go versions, projects and track dependencies.
  • s3gof3r - Small utility/library optimized for high speed transfer of large objects into and out of Amazon S3.
  • Scaleway-cli - Manage BareMetal Servers from Command Line (as easily as with Docker).
  • sg - Benchmarks a set of HTTP endpoints (like ab), with possibility to use the reponse code and data between each call for specific server stress based on its previous response.
  • skm - SKM is a simple and powerful SSH Keys Manager, it helps you to manage your multiple SSH keys easily!
  • StatusOK - Monitor your Website and REST APIs.Get Notified through Slack, E-mail when your server is down or response time is more than expected.
  • traefik - Reverse proxy and load balancer with support for multiple backends.
  • Vegeta - HTTP load testing tool and library. It's over 9000!
  • webhook - Tool which allows user to create HTTP endpoints (hooks) that execute commands on the server.
  • Wide - Web-based IDE for Teams using Golang.
  • winrm-cli - Cli tool to remotely execute commands on Windows machines.

Other Software

  • borg - Terminal based search engine for bash snippets.
  • boxed - Dropbox based blog engine.
  • Cherry - Tiny webchat server in Go.
  • Circuit - Circuit is a programmable platform-as-a-service (PaaS) and/or Infrastructure-as-a-Service (IaaS), for management, discovery, synchronization and orchestration of services and hosts comprising cloud applications.
  • Comcast - Simulate bad network connections.
  • confd - Manage local application configuration files using templates and data from etcd or consul.
  • DDNS - Personal DDNS client with Digital Ocean Networking DNS as backend.
  • Docker - Open platform for distributed applications for developers and sysadmins.
  • Documize - Modern wiki software that integrates data from SaaS tools.
  • fleet - Distributed init System.
  • Go Package Store - App that displays updates for the Go packages in your GOPATH.
  • gocc - Gocc is a compiler kit for Go written in Go.
  • GoDNS - A dynamic DNS client tool, supports DNSPod & HE.net, written in Go.
  • GoDocTooltip - Chrome extension for Go Doc sites, which shows function description as tooltip at funciton list.
  • GoLand - Full featured cross-platform Go IDE.
  • Gor - Http traffic replication tool, for replaying traffic from production to stage/dev environments in real-time.
  • hugo - Fast and Modern Static Website Engine.
  • ide - Browser accessible IDE. Designed for Go with Go.
  • ipe - Open source Pusher server implementation compatible with Pusher client libraries written in GO.
  • JayDiff - JSON diff utility written in Go.
  • Juju - Cloud-agnostic service deployment and orchestration - supports EC2, Azure, Openstack, MAAS and more.
  • Leaps - Pair programming service using Operational Transforms.
  • limetext - Lime Text is a powerful and elegant text editor primarily developed in Go that aims to be a Free and open-source software successor to Sublime Text.
  • LiteIDE - LiteIDE is a simple, open source, cross-platform Go IDE.
  • mockingjay - Fake HTTP servers and consumer driven contracts from one configuration file. You can also make the server randomly misbehave to help do more realistic performance tests.
  • myLG - Command Line Network Diagnostic tool written in Go.
  • naclpipe - Simple NaCL EC25519 based crypto pipe tool written in Go.
  • nes - Nintendo Entertainment System (NES) emulator written in Go.
  • orange-cat - Markdown previewer written in Go.
  • Orbit - A simple tool for running commands and generating files from templates.
  • peg - Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator.
  • Postman - Command-line utility for batch-sending email.
  • restic - De-duplicating backup program.
  • rkt - App Container runtime that integrates with init systems, is compatible with other container formats like Docker, and supports alternative execution engines like KVM.
  • Seaweed File System - Fast, Simple and Scalable Distributed File System with O(1) disk seek.
  • shell2http - Executing shell commands via http server (for prototyping or remote control).
  • snap - Powerful telemetry framework.
  • Snitch - Simple way to notify your team and many tools when someone has deployed any application via Tsuru.
  • Stack Up - Stack Up, a super simple deployment tool - just Unix - think of it like 'make' for a network of servers.
  • syncthing - Open, decentralized file synchronization tool and protocol.
  • Tenyks - Service oriented IRC bot using Redis and JSON for messaging.
  • term-quiz - Quizzes for your terminal.
  • toto - Simple proxy server written in Go language, can be used together with browser.
  • toxiproxy - Proxy to simulate network and system conditions for automated tests.
  • tsuru - Extensible and open source Platform as a Service software.
  • vFlow - High-performance, scalable and reliable IPFIX, sFlow and Netflow collector.
  • websysd - Web based process manager (like Marathon or Upstart).
  • wellington - Sass project management tool, extends the language with sprite functions (like Compass).

Resources

Where to discover new Go libraries.

Benchmarks

  • autobench - Framework to compare the performance between different Go versions.
  • go-benchmark-app - Powerful HTTP-benchmark tool mixed with Аb, Wrk, Siege tools. Gathering statistics and various parameters for benchmarks and comparison results.
  • go-benchmarks - Few miscellaneous Go microbenchmarks. Compare some language features to alternative approaches.
  • go-http-routing-benchmark - Go HTTP request router benchmark and comparison.
  • go-type-assertion-benchmark - Naive performance test of two ways to do type assertion in Go.
  • go-web-framework-benchmark - Go web framework benchmark.
  • go_serialization_benchmarks - Benchmarks of Go serialization methods.
  • gocostmodel - Benchmarks of common basic operations for the Go language.
  • golang-micro-benchmarks - Tiny collection of Go micro benchmarks. The intent is to compare some language features to others.
  • golang-sql-benchmark - Collection of benchmarks for popular Go database/SQL utilities.
  • gospeed - Go micro-benchmarks for calculating the speed of language constructs.
  • kvbench - Key/Value database benchmark.
  • skynet - Skynet 1M threads microbenchmark.
  • speedtest-resize - Compare various Image resize algorithms for the Go language.

Conferences

E-Books

Gophers

Meetups

Add the group of your city/country here (send PR)

Twitter

Websites

Tutorials

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - bitcoin/bitcoin: Bitcoin Core integration/staging tree
Skip to content
C++ Python C M4 Objective-C Makefile Other
Latest commit aae64a2 Feb 22, 2018
laanwj Merge #12451: Bump leveldb subtree
835a21b Squashed 'src/leveldb/' changes from c521b3ac65..64052c76c5 (MarcoFalke)

Pull request description:

  Pull in changes from #11674 (comment).

  Merges cleanly into master and 0.16 branch.

Tree-SHA512: 819c042c0dfac8dc3078fc182c1e22d4a85b343967475d3389be5b5b056361114d8c9892437cd1dc4b45808c27880c0e166e047afc2c2bd2bbc33e55336a8c33
Permalink
Failed to load latest commit information.
.github Make default issue text all comments to make issues more readable Nov 16, 2017
.tx tx: Update transifex slug for 0.16 Jan 24, 2018
build-aux/m4 Merge #12294: [Docs] Create NetBSD build instructions and fix compila… Jan 30, 2018
contrib Merge #12308: contrib: Add support for out-of-tree builds in gen-manp… Feb 18, 2018
depends Merge #12402: [depends] expat 2.2.5, ccache 3.4.1, miniupnpc 2.0.2018… Feb 16, 2018
doc Merge #12029: Build: Add a makefile target for Doxygen documentation Feb 17, 2018
share Increment MIT Licence copyright header year on files modified in 2017 Jan 2, 2018
src Merge #12451: Bump leveldb subtree Feb 22, 2018
test Add test for signrawtransaction Feb 17, 2018
.gitattributes Separate protocol versioning from clientversion Oct 29, 2014
.gitignore [build] .gitignore: add QT Creator artifacts Dec 22, 2017
.travis.yml [tests] Fix names of excluded extended tests for travis Jan 29, 2018
CONTRIBUTING.md [docs] links to code style guides Nov 20, 2017
COPYING [Trivial] Update license year range to 2018 Dec 31, 2017
INSTALL.md Update INSTALL landing redirection notice for build instructions. Oct 5, 2016
Makefile.am Build: Add a makefile target for Doxygen documentation Jan 25, 2018
README.md Rename test/pull-tester/rpc-tests.py to test/functional/test_runner.py Mar 20, 2017
autogen.sh Add MIT license to autogen.sh and share/genbuild.sh Sep 21, 2016
configure.ac Merge #12029: Build: Add a makefile target for Doxygen documentation Feb 17, 2018
libbitcoinconsensus.pc.in Unify package name to as few places as possible without major changes Dec 14, 2015

README.md

Bitcoin Core integration/staging tree

Build Status

https://bitcoincore.org

What is Bitcoin?

Bitcoin is an experimental digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. Bitcoin Core is the name of open source software which enables the use of this currency.

For more information, as well as an immediately useable, binary version of the Bitcoin Core software, see https://bitcoin.org/en/download, or read the original whitepaper.

License

Bitcoin Core is released under the terms of the MIT license. See COPYING for more information or see https://opensource.org/licenses/MIT.

Development Process

The master branch is regularly built and tested, but is not guaranteed to be completely stable. Tags are created regularly to indicate new official, stable release versions of Bitcoin Core.

The contribution workflow is described in CONTRIBUTING.md.

The developer mailing list should be used to discuss complicated or controversial changes before working on a patch set.

Developer IRC can be found on Freenode at #bitcoin-core-dev.

Testing

Testing and code review is the bottleneck for development; we get more pull requests than we can review and test on short notice. Please be patient and help out by testing other people's pull requests, and remember this is a security-critical project where any mistake might cost people lots of money.

Automated Testing

Developers are strongly encouraged to write unit tests for new code, and to submit new unit tests for old code. Unit tests can be compiled and run (assuming they weren't disabled in configure) with: make check. Further details on running and extending unit tests can be found in /src/test/README.md.

There are also regression and integration tests, written in Python, that are run automatically on the build server. These tests can be run (if the test dependencies are installed) with: test/functional/test_runner.py

The Travis CI system makes sure that every pull request is built for Windows, Linux, and OS X, and that unit/sanity tests are run automatically.

Manual Quality Assurance (QA) Testing

Changes should be tested by somebody other than the developer who wrote the code. This is especially important for large or high-risk changes. It is useful to add a test plan to the pull request description if testing the changes is not straightforward.

Translations

Changes to translations as well as new translations can be submitted to Bitcoin Core's Transifex page.

Translations are periodically pulled from Transifex and merged into the git repository. See the translation process for details on how this works.

Important: We do not accept translation changes as GitHub pull requests because the next pull from Transifex would automatically overwrite them again.

Translators should also subscribe to the mailing list.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - firehol/netdata: Get control of your servers. Simple. Effective. Awesome! https://my-netdata.io/
Skip to content
C Python JavaScript HTML Shell CSS Other
Latest commit 2b1126a Feb 21, 2018
ktsaou Merge pull request #3453 from ktsaou/master
 add sleep 1 to alpine docker
Permalink
Failed to load latest commit information.
.travis Enable build and deploy of self-extractor Apr 3, 2017
build python modules installer updated Jun 22, 2016
charts.d check that the ipsec command is libreswan; fixes #3221 Jan 4, 2018
conf.d Add module to makefiles Feb 20, 2018
contrib do not call yum-builddep to allow working on newer distros Jan 6, 2018
diagrams added libreswan Jan 4, 2018
hooks Add hooks and packaging scripts Jan 24, 2016
installer Add netdata to ceph group Jan 27, 2018
m4 database flags are now using atomic operations when available Jul 2, 2017
makeself detect the number of processors on freebsd Jan 13, 2018
node.d Fixed a bug where solar consumption is 100% even though solar power i… Jan 29, 2018
packaging Fix script to build release correctly on OSX Jul 18, 2017
plugins.d python.d.plugin: do not exit if conf file not found Feb 13, 2018
profile gitignore cleanup and benchmark tests added Feb 19, 2018
python.d Add module to makefiles Feb 20, 2018
src handle also the case that neither CLOCK_BOOTTIME nor /proc/uptime are… Feb 18, 2018
system more informative signals on freebsd Jan 20, 2018
tests Fixed a bug where solar consumption is 100% even though solar power i… Jan 29, 2018
web Rename to ntpd, update README Feb 20, 2018
.codacy.yml added asn-ber.js to codacy excludes Aug 27, 2017
.codeclimate.yml relaxed codeclimate thresholds Nov 30, 2017
.csslintrc added codeclimate coverage Jan 6, 2017
.eslintignore added codeclimate coverage Jan 6, 2017
.eslintrc added codeclimate coverage Jan 6, 2017
.gitignore gitignore cleanup and benchmark tests added Feb 19, 2018
.travis.yml attempt to fix travis bug on large stdout/stderr dumps Dec 26, 2017
CMakeLists.txt abstracted pthreads into netdata_threads Dec 28, 2017
COPYING added COPYING, fixed a few typos #182 Apr 5, 2016
ChangeLog Prepare release 1.9.0 Dec 16, 2017
Dockerfile Restore original Dockerfile Feb 20, 2018
Dockerfile.aarch64 Add aarch64/arm64 build Feb 6, 2018
Dockerfile.alpine add sleep 1 to alpine docker; #3431 Feb 21, 2018
Dockerfile.armv7hf Update to Debian Stretch for docker containers Feb 6, 2018
LICENSE Rename LICENSE.txt to LICENSE May 12, 2017
LICENSE-REDISTRIBUTED.md added d3pie licenses Jan 25, 2018
LICENSE.md minor aesthetic changes to license files May 13, 2017
Makefile.am added missing Dockerfiles to make files Feb 20, 2018
README.md Add ceph docs Jan 27, 2018
autogen.sh make sure /etc/profile does not change the working directory; fixes #… Feb 4, 2017
configs.signatures updated configs.signatures Feb 19, 2018
configure.ac procfile optimizations to eliminate parser variables and memory lookups Feb 17, 2018
coverity-scan.sh removed duplicate shebang Dec 26, 2017
cppcheck.sh more code cleanup Dec 26, 2017
docker-build.sh Add an armv7hf docker build Nov 5, 2017
kickstart-static64.sh added --accept as a valid kickstart-static64.sh option; fixes #3220 Jan 4, 2018
kickstart.sh kickstart.sh should also run the installer; fixes #2387 Jun 25, 2017
netdata-installer.sh Add netdata to ceph group Jan 27, 2018
netdata.cppcheck more code cleanup Dec 26, 2017
netdata.spec.in fix permissions in spec file Jan 11, 2018
package.json updated npm versions Jul 24, 2017

README.md

netdata Build Status Coverity Scan Build Status Codacy Badge Code Climate License: GPL v3+

New to netdata? Here is a live demo: http://my-netdata.io

netdata is a system for distributed real-time performance and health monitoring. It provides unparalleled insights, in real-time, of everything happening on the system it runs (including applications such as web and database servers), using modern interactive web dashboards.

netdata is fast and efficient, designed to permanently run on all systems (physical & virtual servers, containers, IoT devices), without disrupting their core function.

netdata runs on Linux, FreeBSD, and MacOS.

Twitter Follow analytics


User base

Since May 16th 2016 (the date the global public netdata registry was released):
User Base Monitored Servers Sessions Served Docker Pulls

in the last 24 hours:
New Users Today New Machines Today Sessions Today


News

Dec 17th, 2017 - netdata v1.9.0 released!

A big release:

  • dashboard snapshots, for loading / saving selected time-frames
  • highlighted time-frames across all charts of the dashboard
  • IP access lists for filtering access to netdata
  • enhanced VMs and containers monitoring
  • auto-scaling of chart units
  • timezone conversion at the dashboard to allow comparing charts with server logs
  • python.d.plugin rewritten
  • dozens of more improvements, enhancements, features and compatibility fixes

Features

  • Stunning interactive bootstrap dashboards
    mouse and touch friendly, in 2 themes: dark, light

  • Amazingly fast
    responds to all queries in less than 0.5 ms per metric, even on low-end hardware

  • Highly efficient
    collects thousands of metrics per server per second, with just 1% CPU utilization of a single core, a few MB of RAM and no disk I/O at all

  • Sophisticated alerting
    hundreds of alarms, out of the box!
    supports dynamic thresholds, hysteresis, alarm templates, multiple role-based notification methods (such as email, slack.com, flock.com, pushover.net, pushbullet.com, telegram.org, twilio.com, messagebird.com, kavenegar.com)

  • Extensible
    you can monitor anything you can get a metric for, using its Plugin API (anything can be a netdata plugin, BASH, python, perl, node.js, java, Go, ruby, etc)

  • Embeddable
    it can run anywhere a Linux kernel runs (even IoT) and its charts can be embedded on your web pages too

  • Customizable
    custom dashboards can be built using simple HTML (no javascript necessary)

  • Zero configuration
    auto-detects everything, it can collect up to 5000 metrics per server out of the box

  • Zero dependencies
    it is even its own web server, for its static web files and its web API

  • Zero maintenance
    you just run it, it does the rest

  • scales to infinity
    requiring minimal central resources

  • several operating modes
    autonomous host monitoring, headless data collector, forwarding proxy, store and forward proxy, central multi-host monitoring, in all possible configurations. Each node may have different metrics retention policy and run with or without health monitoring.

  • time-series back-ends supported
    can archive its metrics on graphite, opentsdb, prometheus, json document DBs, in the same or lower detail (lower: to prevent it from congesting these servers due to the amount of data collected)

netdata


What does it monitor?

netdata collects several thousands of metrics per device. All these metrics are collected and visualized in real-time.

Almost all metrics are auto-detected, without any configuration.

This is a list of what it currently monitors:

  • CPU
    usage, interrupts, softirqs, frequency, total and per core, CPU states

  • Memory
    RAM, swap and kernel memory usage, KSM (Kernel Samepage Merging), NUMA

  • Disks
    per disk: I/O, operations, backlog, utilization, space, software RAID (md)

    sda

  • Network interfaces
    per interface: bandwidth, packets, errors, drops

    dsl0

  • IPv4 networking
    bandwidth, packets, errors, fragments, tcp: connections, packets, errors, handshake, udp: packets, errors, broadcast: bandwidth, packets, multicast: bandwidth, packets

  • IPv6 networking
    bandwidth, packets, errors, fragments, ECT, udp: packets, errors, udplite: packets, errors, broadcast: bandwidth, multicast: bandwidth, packets, icmp: messages, errors, echos, router, neighbor, MLDv2, group membership, break down by type

  • Interprocess Communication - IPC
    such as semaphores and semaphores arrays

  • netfilter / iptables Linux firewall
    connections, connection tracker events, errors

  • Linux DDoS protection
    SYNPROXY metrics

  • fping latencies
    for any number of hosts, showing latency, packets and packet loss

    image

  • Processes
    running, blocked, forks, active

  • Entropy
    random numbers pool, using in cryptography

  • NFS file servers and clients
    NFS v2, v3, v4: I/O, cache, read ahead, RPC calls

  • Network QoS
    the only tool that visualizes network tc classes in realtime

    qos-tc-classes

  • Linux Control Groups
    containers: systemd, lxc, docker

  • Applications
    by grouping the process tree and reporting CPU, memory, disk reads, disk writes, swap, threads, pipes, sockets - per group

    apps

  • Users and User Groups resource usage
    by summarizing the process tree per user and group, reporting: CPU, memory, disk reads, disk writes, swap, threads, pipes, sockets

  • Apache and lighttpd web servers
    mod-status (v2.2, v2.4) and cache log statistics, for multiple servers

  • Nginx web servers
    stub-status, for multiple servers

  • Tomcat
    accesses, threads, free memory, volume

  • web server log files
    extracting in real-time, web server performance metrics and applying several health checks

  • mySQL databases
    multiple servers, each showing: bandwidth, queries/s, handlers, locks, issues, tmp operations, connections, binlog metrics, threads, innodb metrics, and more

  • Postgres databases
    multiple servers, each showing: per database statistics (connections, tuples read - written - returned, transactions, locks), backend processes, indexes, tables, write ahead, background writer and more

  • Redis databases
    multiple servers, each showing: operations, hit rate, memory, keys, clients, slaves

  • couchdb
    reads/writes, request methods, status codes, tasks, replication, per-db, etc

  • mongodb
    operations, clients, transactions, cursors, connections, asserts, locks, etc

  • memcached databases
    multiple servers, each showing: bandwidth, connections, items

  • elasticsearch
    search and index performance, latency, timings, cluster statistics, threads statistics, etc

  • ISC Bind name servers
    multiple servers, each showing: clients, requests, queries, updates, failures and several per view metrics

  • NSD name servers
    queries, zones, protocols, query types, transfers, etc.

  • PowerDNS
    queries, answers, cache, latency, etc.

  • Postfix email servers
    message queue (entries, size)

  • exim email servers
    message queue (emails queued)

  • Dovecot POP3/IMAP servers

  • ISC dhcpd
    pools utilization, leases, etc.

  • IPFS
    bandwidth, peers

  • Squid proxy servers
    multiple servers, each showing: clients bandwidth and requests, servers bandwidth and requests

  • HAproxy
    bandwidth, sessions, backends, etc

  • varnish
    threads, sessions, hits, objects, backends, etc

  • OpenVPN
    status per tunnel

  • Hardware sensors
    lm_sensors and IPMI: temperature, voltage, fans, power, humidity

  • NUT and APC UPSes
    load, charge, battery voltage, temperature, utility metrics, output metrics

  • PHP-FPM
    multiple instances, each reporting connections, requests, performance

  • hddtemp
    disk temperatures

  • smartd
    disk S.M.A.R.T. values

  • SNMP devices
    can be monitored too (although you will need to configure these)

  • chrony
    frequencies, offsets, delays, etc.

  • beanstalkd
    global and per tube monitoring

  • statsd
    netdata is a fully featured statsd server

  • ceph
    OSD usage, Pool usage, number of objects, etc.

And you can extend it, by writing plugins that collect data from any source, using any computer language.


netdata infographic

This is a high level overview of netdata feature set and architecture. Click it to to interact with it (it has direct links to documentation).

netdata-overview


Installation

Use our automatic installer to build and install it on your system.

It should run on any Linux system (including IoT). It has been tested on:

  • Alpine
  • Arch Linux
  • CentOS
  • Debian
  • Fedora
  • Gentoo
  • openSUSE
  • PLD Linux
  • RedHat Enterprise Linux
  • SUSE
  • Ubuntu

Interaction with netdata

After installation, you can interact with netdata using CLI and web dashboards. The default port of dashboard is 19999. To access the web dashboard on localhost, use: http://localhost:19999


Documentation

Check the netdata wiki.

License

netdata is GPLv3+.

It re-distributes other open-source tools and libraries. Please check the third party licenses.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - antirez/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, HyperLogLogs, Bitmaps.
Skip to content
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, HyperLogLogs, Bitmaps.
C Tcl Ruby Objective-C Shell Makefile Other
Latest commit ffde73c Feb 19, 2018
antirez Track number of logically expired keys still in memory.
This commit adds two new fields in the INFO output, stats section:

expired_stale_perc:0.34
expired_time_cap_reached_count:58

The first field is an estimate of the number of keys that are yet in
memory but are already logically expired. They reason why those keys are
yet not reclaimed is because the active expire cycle can't spend more
time on the process of reclaiming the keys, and at the same time nobody
is accessing such keys. However as the active expire cycle runs, while
it will eventually have to return to the caller, because of time limit
or because there are less than 25% of keys logically expired in each
given database, it collects the stats in order to populate this INFO
field.

Note that expired_stale_perc is a running average, where the current
sample accounts for 5% and the history for 95%, so you'll see it
changing smoothly over time.

The other field, expired_time_cap_reached_count, counts the number
of times the expire cycle had to stop, even if still it was finding a
sizeable number of keys yet to expire, because of the time limit.
This allows people handling operations to understand if the Redis
server, during mass-expiration events, is able to collect keys fast
enough usually. It is normal for this field to increment during mass
expires, but normally it should very rarely increment. When instead it
constantly increments, it means that the current workloads is using
a very important percentage of CPU time to expire keys.

This feature was created thanks to the hints of Rashmi Ramesh and
Bart Robinson from Twitter. In private email exchanges, they noted how
it was important to improve the observability of this parameter in the
Redis server. Actually in big deployments, the amount of keys that are
yet to expire in each server, even if they are logically expired, may
account for a very big amount of wasted memory.

README.md

This README is just a fast quick start document. You can find more detailed documentation at redis.io.

What is Redis?

Redis is often referred as a data structures server. What this means is that Redis provides access to mutable data structures via a set of commands, which are sent using a server-client model with TCP sockets and a simple protocol. So different processes can query and modify the same data structures in a shared way.

Data structures implemented into Redis have a few special properties:

  • Redis cares to store them on disk, even if they are always served and modified into the server memory. This means that Redis is fast, but that is also non-volatile.
  • Implementation of data structures stress on memory efficiency, so data structures inside Redis will likely use less memory compared to the same data structure modeled using an high level programming language.
  • Redis offers a number of features that are natural to find in a database, like replication, tunable levels of durability, cluster, high availability.

Another good example is to think of Redis as a more complex version of memcached, where the operations are not just SETs and GETs, but operations to work with complex data types like Lists, Sets, ordered data structures, and so forth.

If you want to know more, this is a list of selected starting points:

Building Redis

Redis can be compiled and used on Linux, OSX, OpenBSD, NetBSD, FreeBSD. We support big endian and little endian architectures, and both 32 bit and 64 bit systems.

It may compile on Solaris derived systems (for instance SmartOS) but our support for this platform is best effort and Redis is not guaranteed to work as well as in Linux, OSX, and *BSD there.

It is as simple as:

% make

You can run a 32 bit Redis binary using:

% make 32bit

After building Redis, it is a good idea to test it using:

% make test

Fixing build problems with dependencies or cached build options

Redis has some dependencies which are included into the deps directory. make does not automatically rebuild dependencies even if something in the source code of dependencies changes.

When you update the source code with git pull or when code inside the dependencies tree is modified in any other way, make sure to use the following command in order to really clean everything and rebuild from scratch:

make distclean

This will clean: jemalloc, lua, hiredis, linenoise.

Also if you force certain build options like 32bit target, no C compiler optimizations (for debugging purposes), and other similar build time options, those options are cached indefinitely until you issue a make distclean command.

Fixing problems building 32 bit binaries

If after building Redis with a 32 bit target you need to rebuild it with a 64 bit target, or the other way around, you need to perform a make distclean in the root directory of the Redis distribution.

In case of build errors when trying to build a 32 bit binary of Redis, try the following steps:

  • Install the packages libc6-dev-i386 (also try g++-multilib).
  • Try using the following command line instead of make 32bit: make CFLAGS="-m32 -march=native" LDFLAGS="-m32"

Allocator

Selecting a non-default memory allocator when building Redis is done by setting the MALLOC environment variable. Redis is compiled and linked against libc malloc by default, with the exception of jemalloc being the default on Linux systems. This default was picked because jemalloc has proven to have fewer fragmentation problems than libc malloc.

To force compiling against libc malloc, use:

% make MALLOC=libc

To compile against jemalloc on Mac OS X systems, use:

% make MALLOC=jemalloc

Verbose build

Redis will build with a user friendly colorized output by default. If you want to see a more verbose output use the following:

% make V=1

Running Redis

To run Redis with the default configuration just type:

% cd src
% ./redis-server

If you want to provide your redis.conf, you have to run it using an additional parameter (the path of the configuration file):

% cd src
% ./redis-server /path/to/redis.conf

It is possible to alter the Redis configuration by passing parameters directly as options using the command line. Examples:

% ./redis-server --port 9999 --slaveof 127.0.0.1 6379
% ./redis-server /etc/redis/6379.conf --loglevel debug

All the options in redis.conf are also supported as options using the command line, with exactly the same name.

Playing with Redis

You can use redis-cli to play with Redis. Start a redis-server instance, then in another terminal try the following:

% cd src
% ./redis-cli
redis> ping
PONG
redis> set foo bar
OK
redis> get foo
"bar"
redis> incr mycounter
(integer) 1
redis> incr mycounter
(integer) 2
redis>

You can find the list of all the available commands at http://redis.io/commands.

Installing Redis

In order to install Redis binaries into /usr/local/bin just use:

% make install

You can use make PREFIX=/some/other/directory install if you wish to use a different destination.

Make install will just install binaries in your system, but will not configure init scripts and configuration files in the appropriate place. This is not needed if you want just to play a bit with Redis, but if you are installing it the proper way for a production system, we have a script doing this for Ubuntu and Debian systems:

% cd utils
% ./install_server.sh

The script will ask you a few questions and will setup everything you need to run Redis properly as a background daemon that will start again on system reboots.

You'll be able to stop and start Redis using the script named /etc/init.d/redis_<portnumber>, for instance /etc/init.d/redis_6379.

Code contributions

Note: by contributing code to the Redis project in any form, including sending a pull request via Github, a code fragment or patch via private email or public discussion groups, you agree to release your code under the terms of the BSD license that you can find in the COPYING file included in the Redis source distribution.

Please see the CONTRIBUTING file in this source distribution for more information.

Redis internals

If you are reading this README you are likely in front of a Github page or you just untarred the Redis distribution tar ball. In both the cases you are basically one step away from the source code, so here we explain the Redis source code layout, what is in each file as a general idea, the most important functions and structures inside the Redis server and so forth. We keep all the discussion at a high level without digging into the details since this document would be huge otherwise and our code base changes continuously, but a general idea should be a good starting point to understand more. Moreover most of the code is heavily commented and easy to follow.

Source code layout

The Redis root directory just contains this README, the Makefile which calls the real Makefile inside the src directory and an example configuration for Redis and Sentinel. You can find a few shell scripts that are used in order to execute the Redis, Redis Cluster and Redis Sentinel unit tests, which are implemented inside the tests directory.

Inside the root are the following important directories:

  • src: contains the Redis implementation, written in C.
  • tests: contains the unit tests, implemented in Tcl.
  • deps: contains libraries Redis uses. Everything needed to compile Redis is inside this directory; your system just needs to provide libc, a POSIX compatible interface and a C compiler. Notably deps contains a copy of jemalloc, which is the default allocator of Redis under Linux. Note that under deps there are also things which started with the Redis project, but for which the main repository is not anitrez/redis. An exception to this rule is deps/geohash-int which is the low level geocoding library used by Redis: it originated from a different project, but at this point it diverged so much that it is developed as a separated entity directly inside the Redis repository.

There are a few more directories but they are not very important for our goals here. We'll focus mostly on src, where the Redis implementation is contained, exploring what there is inside each file. The order in which files are exposed is the logical one to follow in order to disclose different layers of complexity incrementally.

Note: lately Redis was refactored quite a bit. Function names and file names have been changed, so you may find that this documentation reflects the unstable branch more closely. For instance in Redis 3.0 the server.c and server.h files were named to redis.c and redis.h. However the overall structure is the same. Keep in mind that all the new developments and pull requests should be performed against the unstable branch.

server.h

The simplest way to understand how a program works is to understand the data structures it uses. So we'll start from the main header file of Redis, which is server.h.

All the server configuration and in general all the shared state is defined in a global structure called server, of type struct redisServer. A few important fields in this structure are:

  • server.db is an array of Redis databases, where data is stored.
  • server.commands is the command table.
  • server.clients is a linked list of clients connected to the server.
  • server.master is a special client, the master, if the instance is a slave.

There are tons of other fields. Most fields are commented directly inside the structure definition.

Another important Redis data structure is the one defining a client. In the past it was called redisClient, now just client. The structure has many fields, here we'll just show the main ones:

struct client {
    int fd;
    sds querybuf;
    int argc;
    robj **argv;
    redisDb *db;
    int flags;
    list *reply;
    char buf[PROTO_REPLY_CHUNK_BYTES];
    ... many other fields ...
}

The client structure defines a connected client:

  • The fd field is the client socket file descriptor.
  • argc and argv are populated with the command the client is executing, so that functions implementing a given Redis command can read the arguments.
  • querybuf accumulates the requests from the client, which are parsed by the Redis server according to the Redis protocol and executed by calling the implementations of the commands the client is executing.
  • reply and buf are dynamic and static buffers that accumulate the replies the server sends to the client. These buffers are incrementally written to the socket as soon as the file descriptor is writable.

As you can see in the client structure above, arguments in a command are described as robj structures. The following is the full robj structure, which defines a Redis object:

typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;
    unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */
    int refcount;
    void *ptr;
} robj;

Basically this structure can represent all the basic Redis data types like strings, lists, sets, sorted sets and so forth. The interesting thing is that it has a type field, so that it is possible to know what type a given object has, and a refcount, so that the same object can be referenced in multiple places without allocating it multiple times. Finally the ptr field points to the actual representation of the object, which might vary even for the same type, depending on the encoding used.

Redis objects are used extensively in the Redis internals, however in order to avoid the overhead of indirect accesses, recently in many places we just use plain dynamic strings not wrapped inside a Redis object.

server.c

This is the entry point of the Redis server, where the main() function is defined. The following are the most important steps in order to startup the Redis server.

  • initServerConfig() setups the default values of the server structure.
  • initServer() allocates the data structures needed to operate, setup the listening socket, and so forth.
  • aeMain() starts the event loop which listens for new connections.

There are two special functions called periodically by the event loop:

  1. serverCron() is called periodically (according to server.hz frequency), and performs tasks that must be performed from time to time, like checking for timedout clients.
  2. beforeSleep() is called every time the event loop fired, Redis served a few requests, and is returning back into the event loop.

Inside server.c you can find code that handles other vital things of the Redis server:

  • call() is used in order to call a given command in the context of a given client.
  • activeExpireCycle() handles eviciton of keys with a time to live set via the EXPIRE command.
  • freeMemoryIfNeeded() is called when a new write command should be performed but Redis is out of memory according to the maxmemory directive.
  • The global variable redisCommandTable defines all the Redis commands, specifying the name of the command, the function implementing the command, the number of arguments required, and other properties of each command.

networking.c

This file defines all the I/O functions with clients, masters and slaves (which in Redis are just special clients):

  • createClient() allocates and initializes a new client.
  • the addReply*() family of functions are used by commands implementations in order to append data to the client structure, that will be transmitted to the client as a reply for a given command executed.
  • writeToClient() transmits the data pending in the output buffers to the client and is called by the writable event handler sendReplyToClient().
  • readQueryFromClient() is the readable event handler and accumulates data from read from the client into the query buffer.
  • processInputBuffer() is the entry point in order to parse the client query buffer according to the Redis protocol. Once commands are ready to be processed, it calls processCommand() which is defined inside server.c in order to actually execute the command.
  • freeClient() deallocates, disconnects and removes a client.

aof.c and rdb.c

As you can guess from the names these files implement the RDB and AOF persistence for Redis. Redis uses a persistence model based on the fork() system call in order to create a thread with the same (shared) memory content of the main Redis thread. This secondary thread dumps the content of the memory on disk. This is used by rdb.c to create the snapshots on disk and by aof.c in order to perform the AOF rewrite when the append only file gets too big.

The implementation inside aof.c has additional functions in order to implement an API that allows commands to append new commands into the AOF file as clients execute them.

The call() function defined inside server.c is responsible to call the functions that in turn will write the commands into the AOF.

db.c

Certain Redis commands operate on specific data types, others are general. Examples of generic commands are DEL and EXPIRE. They operate on keys and not on their values specifically. All those generic commands are defined inside db.c.

Moreover db.c implements an API in order to perform certain operations on the Redis dataset without directly accessing the internal data structures.

The most important functions inside db.c which are used in many commands implementations are the following:

  • lookupKeyRead() and lookupKeyWrite() are used in order to get a pointer to the value associated to a given key, or NULL if the key does not exist.
  • dbAdd() and its higher level counterpart setKey() create a new key in a Redis database.
  • dbDelete() removes a key and its associated value.
  • emptyDb() removes an entire single database or all the databases defined.

The rest of the file implements the generic commands exposed to the client.

object.c

The robj structure defining Redis objects was already described. Inside object.c there are all the functions that operate with Redis objects at a basic level, like functions to allocate new objects, handle the reference counting and so forth. Notable functions inside this file:

  • incrRefcount() and decrRefCount() are used in order to increment or decrement an object reference count. When it drops to 0 the object is finally freed.
  • createObject() allocates a new object. There are also specialized functions to allocate string objects having a specific content, like createStringObjectFromLongLong() and similar functions.

This file also implements the OBJECT command.

replication.c

This is one of the most complex files inside Redis, it is recommended to approach it only after getting a bit familiar with the rest of the code base. In this file there is the implementation of both the master and slave role of Redis.

One of the most important functions inside this file is replicationFeedSlaves() that writes commands to the clients representing slave instances connected to our master, so that the slaves can get the writes performed by the clients: this way their data set will remain synchronized with the one in the master.

This file also implements both the SYNC and PSYNC commands that are used in order to perform the first synchronization between masters and slaves, or to continue the replication after a disconnection.

Other C files

  • t_hash.c, t_list.c, t_set.c, t_string.c and t_zset.c contains the implementation of the Redis data types. They implement both an API to access a given data type, and the client commands implementations for these data types.
  • ae.c implements the Redis event loop, it's a self contained library which is simple to read and understand.
  • sds.c is the Redis string library, check http://github.com/antirez/sds for more information.
  • anet.c is a library to use POSIX networking in a simpler way compared to the raw interface exposed by the kernel.
  • dict.c is an implementation of a non-blocking hash table which rehashes incrementally.
  • scripting.c implements Lua scripting. It is completely self contained from the rest of the Redis implementation and is simple enough to understand if you are familar with the Lua API.
  • cluster.c implements the Redis Cluster. Probably a good read only after being very familiar with the rest of the Redis code base. If you want to read cluster.c make sure to read the Redis Cluster specification.

Anatomy of a Redis command

All the Redis commands are defined in the following way:

void foobarCommand(client *c) {
    printf("%s",c->argv[1]->ptr); /* Do something with the argument. */
    addReply(c,shared.ok); /* Reply something to the client. */
}

The command is then referenced inside server.c in the command table:

{"foobar",foobarCommand,2,"rtF",0,NULL,0,0,0,0,0},

In the above example 2 is the number of arguments the command takes, while "rtF" are the command flags, as documented in the command table top comment inside server.c.

After the command operates in some way, it returns a reply to the client, usually using addReply() or a similar function defined inside networking.c.

There are tons of commands implementations inside th Redis source code that can serve as examples of actual commands implementations. To write a few toy commands can be a good exercise to familiarize with the code base.

There are also many other files not described here, but it is useless to cover everything. We want to just help you with the first steps. Eventually you'll find your way inside the Redis code base :-)

Enjoy!

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - jashkenas/backbone: Give your JS App some Backbone with Models, Views, Collections, and Events
Skip to content
Give your JS App some Backbone with Models, Views, Collections, and Events
JavaScript HTML CoffeeScript
Latest commit 82bf61e Dec 5, 2017
jashkenas committed Dec 5, 2017 Merge pull request #4146 from rafde/lodash5-compat
`_.bind` to `Function.prototype.bind`

README.md

 ____                     __      __
/\  _`\                  /\ \    /\ \                                   __
\ \ \ \ \     __      ___\ \ \/'\\ \ \____    ___     ___      __      /\_\    ____
 \ \  _ <'  /'__`\   /'___\ \ , < \ \ '__`\  / __`\ /' _ `\  /'__`\    \/\ \  /',__\
  \ \ \ \ \/\ \ \.\_/\ \__/\ \ \\`\\ \ \ \ \/\ \ \ \/\ \/\ \/\  __/  __ \ \ \/\__, `\
   \ \____/\ \__/.\_\ \____\\ \_\ \_\ \_,__/\ \____/\ \_\ \_\ \____\/\_\_\ \ \/\____/
    \/___/  \/__/\/_/\/____/ \/_/\/_/\/___/  \/___/  \/_/\/_/\/____/\/_/\ \_\ \/___/
                                                                       \ \____/
                                                                        \/___/
(_'_______________________________________________________________________________'_)
(_.———————————————————————————————————————————————————————————————————————————————._)

Backbone supplies structure to JavaScript-heavy applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing application over a RESTful JSON interface.

For Docs, License, Tests, pre-packed downloads, and everything else, really, see: http://backbonejs.org

To suggest a feature or report a bug: https://github.com/jashkenas/backbone/issues

For questions on working with Backbone or general discussions: https://groups.google.com/forum/#!forum/backbonejs, http://stackoverflow.com/questions/tagged/backbone.js, or https://gitter.im/jashkenas/backbone

Backbone is an open-sourced component of DocumentCloud: https://github.com/documentcloud

Many thanks to our contributors: https://github.com/jashkenas/backbone/graphs/contributors

Special thanks to Robert Kieffer for the original philosophy behind Backbone. https://github.com/broofa

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - zurb/foundation-sites: The most advanced responsive front-end framework in the world. Quickly create prototypes and production code for sites that work on any kind of device.
Skip to content
The most advanced responsive front-end framework in the world. Quickly create prototypes and production code for sites that work on any kind of device.
JavaScript HTML CSS
Switch branches/tags
Latest commit f7aab3d Feb 21, 2018
ncoden Merge pull request #10944 from DanielRuf/patch/unit-tests-headless-ch…
…rome

tests: migrate to mocha-headless-chrome
Permalink
Failed to load latest commit information.
.github Merge pull request #10314 from zurb/codepen/6.4.1 Jul 25, 2017
_vendor Add contain helper from sassy lists Aug 1, 2017
assets Code Indentation and end of line! Jun 22, 2017
customizer Include and init triggers by default Aug 4, 2017
dist feat: expose RegExpEscape Jan 19, 2018
docs Merge pull request #10939 from homerjam/patch-1 Feb 20, 2018
gulp fix: export `RegExpEscape` as an external Feb 6, 2018
js fix: trigger opened.zf.offcanvas at the end to prevent race conditions Feb 21, 2018
scss docs: add warning about code duplication in `breakpoint` and XY grid … Feb 18, 2018
test add missing whitespace to empty line Feb 21, 2018
.babelrc remove comma after last element in array. was throwing syntax error Dec 28, 2017
.bowerrc Add modules false to babelrc Apr 20, 2017
.editorconfig do not trim trailing whitespace on markdown files Feb 5, 2015
.eslintrc eslint radix, error Mar 1, 2017
.gitignore [TMP] Fix Sass dependencies import for Bower Dec 7, 2016
.jshintrc End of line! Aug 30, 2017
.npmignore Add yarn.lock Dec 6, 2016
.sass-lint.yml Sass lint: use "stroustrup" as brace style convention Nov 15, 2016
.travis.yml Node 4 installs bombing out, try updating to 6 for travis Apr 4, 2017
.versions update version of `fourseven:scss` dependency Dec 28, 2017
CONTRIBUTING.md Grammar correcting within CONTRIBUTING.md Jan 29, 2017
LICENSE type: change inc. to Inc. in LICENSE Jan 6, 2018
README.md reflect change of npm script name in readme Feb 17, 2018
bower.json Package up 6.4.3 Aug 18, 2017
browserstack.json Add browserstack api access Apr 4, 2017
code-of-conduct.md Add code of conduct Mar 16, 2016
composer.json Remove version specification on composer.json as per issue #9144 Sep 30, 2016
docslink.sh Add shell script to download and link foundation-docs repo Dec 15, 2015
gulpfile.js Update docs vid for new scrollable video May 3, 2017
meteor-README.md Package up 6.4.3 Aug 18, 2017
package-lock.json chore: update package-lock for mocha-headless-chrome Feb 21, 2018
package.js update version of `fourseven:scss` dependency Dec 28, 2017
package.json tests: migrate to mocha-headless-chrome Feb 15, 2018
sache.json updates package manager files... again Nov 19, 2015
webpack.config.js fix: fix webpack.config entry point Jan 14, 2018
yarn.lock chore: update lock files Dec 26, 2017

README.md

Foundation for Sites

Build Status npm version Bower version Gem Version CDNJS dependencies Status devDependencies Status Gitter

Foundation is the most advanced responsive front-end framework in the world. Quickly go from prototype to production, building sites or apps that work on any kind of device with Foundation. Includes a fully customizable, responsive grid, a large library of Sass mixins, commonly used JavaScript plugins, and full accessibility support.

Getting Started

The quickest way to get started is with the basic CSS download. You can get versions with every component, essential ones only, or a custom build.

If you're a Sass user, we have two starter project templates, the Basic Template and the ZURB Template. You can install them by manually downloading them from GitHub, or using the Foundation CLI.

Lastly, if you're rolling your own setup, you can install Foundation through a variety of package managers.

Documentation

The documentation can be found at https://foundation.zurb.com/sites/docs. To run the documentation locally on your machine, you need Node.js installed on your computer. (Your Node.js version must be 4.0 or higher.)

Run these commands to set up the documentation:

git clone https://github.com/zurb/foundation-sites
cd foundation-sites
npm install

Then run npm start to compile the documentation. When it finishes, a new browser window will open pointing to a BrowserSync server displaying the documentation.

Training

Want the guided tour to Foundation from the team that built it? The ZURB team offers comprehensive training courses for developers of all skill levels. If you're new to Foundation, check out the Introduction to Foundation Course to kickstart your skills, amplify your productivity, and get a comprehensive overview of everything Foundation has to offer. More Advanced users should check out the Advanced Foundation Course to learn the Advanced skills that ZURB uses to deliver quality client work in short timeframes.

Testing

Foundation has three kinds of tests: JavaScript, Sass, and visual regression. Refer to our testing guide for more details.

These commands will run the various tests:

  • npm run test:sass
  • npm run test:javascript:units
  • npm run test:visual

Testing Supported By
BrowserStack

Contributing

Check out our contributing guide to learn how you can contribute to Foundation. You can also browse the Help Wanted tag in our issue tracker to find things to do.

Copyright (c) 2018 ZURB, Inc.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift
Skip to content
Swift Other
Permalink
Failed to load latest commit information.
Alamofire.xcodeproj Update for Swift 4.1 / Xcode 9.3. (#2441) Feb 18, 2018
Alamofire.xcworkspace Remove WorkspaceSettings. Jun 16, 2017
Documentation Add configurable parameter handling to URLEncoding. (#2431) Feb 20, 2018
Example Update for Swift 4.1 / Xcode 9.3. (#2441) Feb 18, 2018
Source Add configurable parameter handling to URLEncoding. (#2431) Feb 20, 2018
Tests Add configurable parameter handling to URLEncoding. (#2431) Feb 20, 2018
docs 4.6.0 Release. (#2374) Dec 4, 2017
.gitignore Updated the .gitignore file with the latest ignore flags for Swift. Feb 7, 2016
.jazzy.yaml Fix dash download (#2258x2) Aug 25, 2017
.ruby-gemset [PR #2250] Added Jazzy docs for the release to work with GitHub Pages. Aug 22, 2017
.ruby-version Revert to Ruby 2.4.2 due to Travis stupidity. Feb 18, 2018
.swift-version Bumped the swift-version file to Swift 3.2. Sep 6, 2017
.travis.yml Update for Swift 4.1 / Xcode 9.3. (#2441) Feb 18, 2018
Alamofire.podspec 4.6.0 Release. (#2374) Dec 4, 2017
CHANGELOG.md 4.6.0 Release. (#2374) Dec 4, 2017
CONTRIBUTING.md Fix a small typo (#2321) Oct 30, 2017
Gemfile Revert to Ruby 2.4.2 due to Travis stupidity. Feb 18, 2018
Gemfile.lock Revert to Ruby 2.4.2 due to Travis stupidity. Feb 18, 2018
ISSUE_TEMPLATE.md Address comments. Jun 27, 2017
LICENSE Added the license file to the deployment Xcode group and bumped copyr… Sep 6, 2017
PULL_REQUEST_TEMPLATE.md Add GitHub templates for issues and PRs. Jun 27, 2017
Package.swift Updated the support versions of Swift, Xcode, and CocoaPods in the RE… Sep 6, 2017
README.md Remove pledgie.com (#2446) Feb 21, 2018
alamofire.png Update docs to properly allow Dash downloads. (#2255) Aug 25, 2017

README.md

Alamofire: Elegant Networking in Swift

Build Status CocoaPods Compatible Carthage Compatible Platform Twitter Gitter

Alamofire is an HTTP networking library written in Swift.

Features

  • Chainable Request / Response Methods
  • URL / JSON / plist Parameter Encoding
  • Upload File / Data / Stream / MultipartFormData
  • Download File using Request or Resume Data
  • Authentication with URLCredential
  • HTTP Response Validation
  • Upload and Download Progress Closures with Progress
  • cURL Command Output
  • Dynamically Adapt and Retry Requests
  • TLS Certificate and Public Key Pinning
  • Network Reachability
  • Comprehensive Unit and Integration Test Coverage
  • Complete Documentation

Component Libraries

In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the Alamofire Software Foundation to bring additional functionality to the Alamofire ecosystem.

  • AlamofireImage - An image library including image response serializers, UIImage and UIImageView extensions, custom image filters, an auto-purging in-memory cache and a priority-based image downloading system.
  • AlamofireNetworkActivityIndicator - Controls the visibility of the network activity indicator on iOS using Alamofire. It contains configurable delay timers to help mitigate flicker and can support URLSession instances not managed by Alamofire.

Requirements

  • iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 8.3+
  • Swift 3.1+

Migration Guides

Communication

  • If you need help, use Stack Overflow. (Tag 'alamofire')
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

CocoaPods 1.1+ is required to build Alamofire 4.0+.

To integrate Alamofire into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'Alamofire', '~> 4.6'
end

Then, run the following command:

$ pod install

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate Alamofire into your Xcode project using Carthage, specify it in your Cartfile:

github "Alamofire/Alamofire" ~> 4.6

Run carthage update to build the framework and drag the built Alamofire.framework into your Xcode project.

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. It is in early development, but Alamofire does support its use on supported platforms.

Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the dependencies value of your Package.swift.

Swift 3

dependencies: [
    .Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4)
]

Swift 4

dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.0.0")
]

Manually

If you prefer not to use any of the aforementioned dependency managers, you can integrate Alamofire into your project manually.

Embedded Framework

  • Open up Terminal, cd into your top-level project directory, and run the following command "if" your project is not initialized as a git repository:

    $ git init
  • Add Alamofire as a git submodule by running the following command:

    $ git submodule add https://github.com/Alamofire/Alamofire.git
  • Open the new Alamofire folder, and drag the Alamofire.xcodeproj into the Project Navigator of your application's Xcode project.

    It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.

  • Select the Alamofire.xcodeproj in the Project Navigator and verify the deployment target matches that of your application target.

  • Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.

  • In the tab bar at the top of that window, open the "General" panel.

  • Click on the + button under the "Embedded Binaries" section.

  • You will see two different Alamofire.xcodeproj folders each with two different versions of the Alamofire.framework nested inside a Products folder.

    It does not matter which Products folder you choose from, but it does matter whether you choose the top or bottom Alamofire.framework.

  • Select the top Alamofire.framework for iOS and the bottom one for OS X.

    You can verify which one you selected by inspecting the build log for your project. The build target for Alamofire will be listed as either Alamofire iOS, Alamofire macOS, Alamofire tvOS or Alamofire watchOS.

  • And that's it!

    The Alamofire.framework is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.

Open Radars

The following radars have some effect on the current implementation of Alamofire.

  • rdar://21349340 - Compiler throwing warning due to toll-free bridging issue in test case
  • rdar://26870455 - Background URL Session Configurations do not work in the simulator
  • rdar://26849668 - Some URLProtocol APIs do not properly handle URLRequest
  • rdar://36082113 - URLSessionTaskMetrics failing to link on watchOS 3.0+

Resolved Radars

The following radars have been resolved over time after being filed against the Alamofire project.

  • rdar://26761490 - Swift string interpolation causing memory leak with common usage (Resolved on 9/1/17 in Xcode 9 beta 6).

FAQ

What's the origin of the name Alamofire?

Alamofire is named after the Alamo Fire flower, a hybrid variant of the Bluebonnet, the official state flower of Texas.

What logic belongs in a Router vs. a Request Adapter?

Simple, static data such as paths, parameters and common headers belong in the Router. Dynamic data such as an Authorization header whose value can changed based on an authentication system belongs in a RequestAdapter.

The reason the dynamic data MUST be placed into the RequestAdapter is to support retry operations. When a Request is retried, the original request is not rebuilt meaning the Router will not be called again. The RequestAdapter is called again allowing the dynamic data to be updated on the original request before retrying the Request.

Credits

Alamofire is owned and maintained by the Alamofire Software Foundation. You can follow them on Twitter at @AlamofireSF for project updates and releases.

Security Disclosure

If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.

Donations

The ASF is looking to raise money to officially register as a federal non-profit organization. Registering will allow us members to gain some legal protections and also allow us to put donations to use, tax free. Donating to the ASF will enable us to:

  • Pay our legal fees to register as a federal non-profit organization
  • Pay our yearly legal fees to keep the non-profit in good status
  • Pay for our mail servers to help us stay on top of all questions and security issues
  • Potentially fund test servers to make it easier for us to test the edge cases
  • Potentially fund developers to work on one of our projects full-time

The community adoption of the ASF libraries has been amazing. We are greatly humbled by your enthusiasm around the projects, and want to continue to do everything we can to move the needle forward. With your continued support, the ASF will be able to improve its reach and also provide better legal safety for the core members. If you use any of our libraries for work, see if your employers would be interested in donating. Our initial goal is to raise $1000 to get all our legal ducks in a row and kickstart this campaign. Any amount you can donate today to help us reach our goal would be greatly appreciated.

License

Alamofire is released under the MIT license. See LICENSE for details.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - GoogleChrome/puppeteer: Headless Chrome Node API
Skip to content
JavaScript HTML CSS
Latest commit 28f88e8 Feb 21, 2018
aslushnikov feat(Chromium): roll Chromium to r538022 (#2072)
This roll includes:
- https://crrev.com/536535 - using HINTING_FULL by default in headless builds, added command line parameter to override it
Permalink
Failed to load latest commit information.
docs docs(api.md): Add more explanation for page.evaluateHandle() (#1867) Feb 22, 2018
examples chore: Spelling and Markdown Consistency (#1998) Feb 9, 2018
lib docs(api.md): Add more explanation for page.evaluateHandle() (#1867) Feb 22, 2018
test fix(Browser): wait for the page to close in the browser in page.close ( Feb 22, 2018
utils feat(appMode): support pipes for appMode (#2032) Feb 15, 2018
.appveyor.yml chore: switch to npm from yarn (#1878) Jan 23, 2018
.editorconfig EditorConfig: 2 space indent (#195) Aug 3, 2017
.eslintignore tests: drop jasmine test runner (#1519) Dec 8, 2017
.eslintrc.js tests: drop jasmine test runner (#1519) Dec 8, 2017
.gitignore chore: switch to npm from yarn (#1878) Jan 23, 2018
.npmignore chore: generalize node6 transpilation (#1560) Dec 8, 2017
.travis.yml chore: switch to npm from yarn (#1878) Jan 23, 2018
CONTRIBUTING.md chore: Spelling and Markdown Consistency (#1998) Feb 9, 2018
DeviceDescriptors.js feat(emulation): add iPhone X and iPhone X landscape (#1631) Dec 20, 2017
LICENSE chore(license): fix license (#1220) Oct 31, 2017
README.md chore: Spelling and Markdown Consistency (#1998) Feb 9, 2018
index.js chore: generalize node6 transpilation (#1560) Dec 8, 2017
install.js feat: Introduce BrowserFetcher class (#1983) Feb 7, 2018
package.json feat(Chromium): roll Chromium to r538022 (#2072) Feb 22, 2018
tsconfig.json chore: Use Typescript to lint JSDoc annotations (#986) Oct 10, 2017

README.md

Puppeteer

Linux Build Status Windows Build Status NPM puppeteer package

API | FAQ | Contributing

Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium.

What can I do?

Most things that you can do manually in the browser can be done using Puppeteer! Here are a few examples to get you started:

  • Generate screenshots and PDFs of pages.
  • Crawl a SPA and generate pre-rendered content (i.e. "SSR").
  • Scrape content from websites.
  • Automate form submission, UI testing, keyboard input, etc.
  • Create an up-to-date, automated testing environment. Run your tests directly in the latest version of Chrome using the latest JavaScript and browser features.
  • Capture a timeline trace of your site to help diagnose performance issues.

Give it a spin: https://try-puppeteer.appspot.com/

Getting Started

Installation

To use Puppeteer in your project, run:

npm i --save puppeteer
# or "yarn add puppeteer"

Note: When you install Puppeteer, it downloads a recent version of Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) that is guaranteed to work with the API. To skip the download, see Environment variables.

Usage

Caution: Puppeteer requires at least Node v6.4.0, but the examples below use async/await which is only supported in Node v7.6.0 or greater.

Puppeteer will be familiar to people using other browser testing frameworks. You create an instance of Browser, open pages, and then manipulate them with Puppeteer's API.

Example - navigating to https://example.com and saving a screenshot as example.png:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

Puppeteer sets an initial page size to 800px x 600px, which defines the screenshot size. The page size can be customized with Page.setViewport().

Example - create a PDF.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
  await page.pdf({path: 'hn.pdf', format: 'A4'});

  await browser.close();
})();

See Page.pdf() for more information about creating pdfs.

Example - evaluate script in the context of the page

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  // Get the "viewport" of the page, as reported by the page.
  const dimensions = await page.evaluate(() => {
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight,
      deviceScaleFactor: window.devicePixelRatio
    };
  });

  console.log('Dimensions:', dimensions);

  await browser.close();
})();

See Page.evaluate() for more information on evaluate and related methods like evaluateOnNewDocument and exposeFunction.

Default runtime settings

1. Uses Headless mode

Puppeteer launches Chromium in headless mode. To launch a full version of Chromium, set the 'headless' option when launching a browser:

const browser = await puppeteer.launch({headless: false}); // default is true

2. Runs a bundled version of Chromium

By default, Puppeteer downloads and uses a specific version of Chromium so its API is guaranteed to work out of the box. To use Puppeteer with a different version of Chrome or Chromium, pass in the executable's path when creating a Browser instance:

const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});

See Puppeteer.launch() for more information.

See this article for a description of the differences between Chromium and Chrome. This article describes some differences for Linux users.

3. Creates a fresh user profile

Puppeteer creates its own Chromium user profile which it cleans up on every run.

API Documentation

Explore the API documentation and examples to learn more.

Debugging tips

  1. Turn off headless mode - sometimes it's useful to see what the browser is displaying. Instead of launching in headless mode, launch a full version of the browser using headless: false:

     const browser = await puppeteer.launch({headless: false});
    
  2. Slow it down - the slowMo option slows down Puppeteer operations by the specified amount of milliseconds. It's another way to help see what's going on.

     const browser = await puppeteer.launch({
       headless: false,
       slowMo: 250 // slow down by 250ms
     });
    
  3. Capture console output - You can listen for the console event. This is also handy when debugging code in page.evaluate():

     page.on('console', msg => console.log('PAGE LOG:', msg.text()));
    
     await page.evaluate(() => console.log(`url is ${location.href}`));
    
     await page.evaluate(() => console.log(`url is ${location.href}`));
    
  4. Enable verbose logging - All public API calls and internal protocol traffic will be logged via the debug module under the puppeteer namespace.

     # Basic verbose logging
     env DEBUG="puppeteer:*" node script.js
    
     # Debug output can be enabled/disabled by namespace
     env DEBUG="puppeteer:*,-puppeteer:protocol" node script.js # everything BUT protocol messages
     env DEBUG="puppeteer:session" node script.js # protocol session messages (protocol messages to targets)
     env DEBUG="puppeteer:mouse,puppeteer:keyboard" node script.js # only Mouse and Keyboard API calls
    
     # Protocol traffic can be rather noisy. This example filters out all Network domain messages
     env DEBUG="puppeteer:*" env DEBUG_COLORS=true node script.js 2>&1 | grep -v '"Network'
    

Contributing to Puppeteer

Check out contributing guide to get an overview of Puppeteer development.

FAQ

Q: Which Chromium version does Puppeteer use?

Look for chromium_revision in package.json.

Puppeteer bundles Chromium to ensure that the latest features it uses are guaranteed to be available. As the DevTools protocol and browser improve over time, Puppeteer will be updated to depend on newer versions of Chromium.

Q: What is the difference between Puppeteer, Selenium / WebDriver, and PhantomJS?

Selenium / WebDriver is a well-established cross-browser API that is useful for testing cross-browser support.

Puppeteer works only with Chromium or Chrome. However, many teams only run unit tests with a single browser (e.g. PhantomJS). In non-testing use cases, Puppeteer provides a powerful but simple API because it's only targeting one browser that enables you to rapidly develop automation scripts.

Puppeteer bundles the latest versions of Chromium.

Q: Who maintains Puppeteer?

The Chrome DevTools team maintains the library, but we'd love your help and expertise on the project! See Contributing.

Q: Why is the Chrome team building Puppeteer?

The goals of the project are simple:

  • Provide a slim, canonical library that highlights the capabilities of the DevTools Protocol.
  • Provide a reference implementation for similar testing libraries. Eventually, these other frameworks could adopt Puppeteer as their foundational layer.
  • Grow the adoption of headless/automated browser testing.
  • Help dogfood new DevTools Protocol features...and catch bugs!
  • Learn more about the pain points of automated browser testing and help fill those gaps.

Q: How does Puppeteer compare with other headless Chrome projects?

The past few months have brought several new libraries for automating headless Chrome. As the team authoring the underlying DevTools Protocol, we're excited to witness and support this flourishing ecosystem.

We've reached out to a number of these projects to see if there are opportunities for collaboration, and we're happy to do what we can to help.

Q: What features does Puppeteer not support?

You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, video playback/screenshots is likely to fail.) There are two reasons for this:

  • Puppeteer is bundled with Chromium--not Chrome--and so by default, it inherits all of Chromium's media-related limitations. This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the executablePath option to puppeteer.launch. You should only use this configuration if you need an official release of Chrome that supports these media formats.)
  • Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer does not support HTTP Live Streaming (HLS).

Q: I am having trouble installing / running Puppeteer in my test environment?

We have a troubleshooting guide for various operating systems that lists the required dependencies.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - rust-lang/rust: A safe, concurrent, practical language.
Skip to content
A safe, concurrent, practical language.
Rust Shell C Python C++ Makefile Other
Latest commit b1f8e6f Feb 22, 2018
bors Auto merge of #48399 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 12 pull requests

- Successful merges: #47379, #47833, #48106, #48198, #48314, #48325, #48335, #48352, #48354, #48360, #48382, #48397
- Failed merges:

README.md

The Rust Programming Language

This is the main source code repository for Rust. It contains the compiler, standard library, and documentation.

Quick Start

Read "Installation" from The Book.

Building from Source

Building on *nix

  1. Make sure you have installed the dependencies:

    • g++ 4.7 or later or clang++ 3.x or later
    • python 2.7 (but not 3.x)
    • GNU make 3.81 or later
    • cmake 3.4.3 or later
    • curl
    • git
  2. Clone the source with git:

    $ git clone https://github.com/rust-lang/rust.git
    $ cd rust
  1. Build and install:

    $ ./x.py build && sudo ./x.py install

    Note: Install locations can be adjusted by copying the config file from ./config.toml.example to ./config.toml, and adjusting the prefix option under [install]. Various other options, such as enabling debug information, are also supported, and are documented in the config file.

    When complete, sudo ./x.py install will place several programs into /usr/local/bin: rustc, the Rust compiler, and rustdoc, the API-documentation tool. This install does not include Cargo, Rust's package manager, which you may also want to build.

Building on Windows

There are two prominent ABIs in use on Windows: the native (MSVC) ABI used by Visual Studio, and the GNU ABI used by the GCC toolchain. Which version of Rust you need depends largely on what C/C++ libraries you want to interoperate with: for interop with software produced by Visual Studio use the MSVC build of Rust; for interop with GNU software built using the MinGW/MSYS2 toolchain use the GNU build.

MinGW

MSYS2 can be used to easily build Rust on Windows:

  1. Grab the latest MSYS2 installer and go through the installer.

  2. Run mingw32_shell.bat or mingw64_shell.bat from wherever you installed MSYS2 (i.e. C:\msys64), depending on whether you want 32-bit or 64-bit Rust. (As of the latest version of MSYS2 you have to run msys2_shell.cmd -mingw32 or msys2_shell.cmd -mingw64 from the command line instead)

  3. From this terminal, install the required tools:

    # Update package mirrors (may be needed if you have a fresh install of MSYS2)
    $ pacman -Sy pacman-mirrors
    
    # Install build tools needed for Rust. If you're building a 32-bit compiler,
    # then replace "x86_64" below with "i686". If you've already got git, python,
    # or CMake installed and in PATH you can remove them from this list. Note
    # that it is important that you do **not** use the 'python2' and 'cmake'
    # packages from the 'msys2' subsystem. The build has historically been known
    # to fail with these packages.
    $ pacman -S git \
                make \
                diffutils \
                tar \
                mingw-w64-x86_64-python2 \
                mingw-w64-x86_64-cmake \
                mingw-w64-x86_64-gcc
  4. Navigate to Rust's source code (or clone it), then build it:

    $ ./x.py build && ./x.py install

MSVC

MSVC builds of Rust additionally require an installation of Visual Studio 2013 (or later) so rustc can use its linker. Make sure to check the “C++ tools” option.

With these dependencies installed, you can build the compiler in a cmd.exe shell with:

> python x.py build

Currently building Rust only works with some known versions of Visual Studio. If you have a more recent version installed the build system doesn't understand then you may need to force rustbuild to use an older version. This can be done by manually calling the appropriate vcvars file before running the bootstrap.

CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
python x.py build

If you are seeing build failure when compiling rustc_binaryen, make sure the path length of the rust folder is not longer than 22 characters.

Specifying an ABI

Each specific ABI can also be used from either environment (for example, using the GNU ABI in powershell) by using an explicit build triple. The available Windows build triples are:

  • GNU ABI (using GCC)
    • i686-pc-windows-gnu
    • x86_64-pc-windows-gnu
  • The MSVC ABI
    • i686-pc-windows-msvc
    • x86_64-pc-windows-msvc

The build triple can be specified by either specifying --build=<triple> when invoking x.py commands, or by copying the config.toml file (as described in Building From Source), and modifying the build option under the [build] section.

Configure and Make

While it's not the recommended build system, this project also provides a configure script and makefile (the latter of which just invokes x.py).

$ ./configure
$ make && sudo make install

When using the configure script, the generated config.mk file may override the config.toml file. To go back to the config.toml file, delete the generated config.mk file.

Building Documentation

If you’d like to build the documentation, it’s almost the same:

$ ./x.py doc

The generated documentation will appear under doc in the build directory for the ABI used. I.e., if the ABI was x86_64-pc-windows-msvc, the directory will be build\x86_64-pc-windows-msvc\doc.

Notes

Since the Rust compiler is written in Rust, it must be built by a precompiled "snapshot" version of itself (made in an earlier state of development). As such, source builds require a connection to the Internet, to fetch snapshots, and an OS that can execute the available snapshot binaries.

Snapshot binaries are currently built and tested on several platforms:

Platform / Architecture x86 x86_64
Windows (7, 8, Server 2008 R2)
Linux (2.6.18 or later)
OSX (10.7 Lion or later)

You may find that other platforms work, but these are our officially supported build environments that are most likely to work.

Rust currently needs between 600MiB and 1.5GiB of RAM to build, depending on platform. If it hits swap, it will take a very long time to build.

There is more advice about hacking on Rust in CONTRIBUTING.md.

Getting Help

The Rust community congregates in a few places:

Contributing

To contribute to Rust, please see CONTRIBUTING.

Rust has an IRC culture and most real-time collaboration happens in a variety of channels on Mozilla's IRC network, irc.mozilla.org. The most popular channel is #rust, a venue for general discussion about Rust. And a good place to ask for help would be #rust-beginners.

License

Rust is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
GitHub - adam-p/markdown-here: Google Chrome, Firefox, and Thunderbird extension that lets you write email in Markdown and render it before sending.
Skip to content
Google Chrome, Firefox, and Thunderbird extension that lets you write email in Markdown and render it before sending.
JavaScript CSS HTML
Latest commit 6bdab32 Nov 8, 2017
adam-p committed Nov 8, 2017 Remove WebExtensions notes

README.md

Markdown Here logo Markdown Here

Visit the website.
Get it for Chrome.
Get it for Firefox.
Get it for Safari.
Get it for Thunderbird and Postbox.
Get it for Opera.
Discuss it and ask questions in the Google Group.

Markdown Here is a Google Chrome, Firefox, Safari, Opera, and Thunderbird extension that lets you write email in Markdown and render them before sending. It also supports syntax highlighting (just specify the language in a fenced code block).

Writing email with code in it is pretty tedious. Writing Markdown with code in it is easy. I found myself writing email in Markdown in the Github in-browser editor, then copying the preview into email. This is a pretty absurd workflow, so I decided create a tool to write and render Markdown right in the email.

To discover what can be done with Markdown in Markdown Here, check out the Markdown Here Cheatsheet and the other wiki pages.

†: And Google Groups posts, and Blogger posts, and Evernote notes, and Wordpress posts! See more.
‡: And TeX mathematical formulae!

screenshot of conversion

Table of Contents

Installation Instructions
Usage Instructions
Troubleshooting
Compatibility
Notes and Miscellaneous
Building the Extension Bundles
Next Steps, Credits, Feedback, License

Installation Instructions

Chrome

Chrome Web Store

Go to the Chrome Web Store page for Markdown Here and install normally.

After installing, make sure to reload your webmail or restart Chrome!

Manual/Development

  1. Clone this repo.
  2. In Chrome, open the Extensions settings. (Wrench button, Tools, Extensions.)
  3. On the Extensions settings page, click the "Developer Mode" checkbox.
  4. Click the now-visible "Load unpacked extension…" button. Navigate to the directory where you cloned the repo, then the src directory under that.
  5. The Markdown Here extension should now be visible in your extensions list.
  6. Reload your webmail page (and maybe application) before trying to convert an email.

Firefox and Thunderbird

Mozilla Add-ons site

Go to the Firefox Add-ons page for Markdown Here and install normally.

Or go to the "Tools > Add-ons" menu and then search for "Markdown Here".

After installing, make sure to restart Firefox/Thunderbird!

Note: It takes up to a month for Mozilla to approve changes to the Firefox/Thunderbird extension, so updates (features, fixes) will lag behind what is shown here. You can manually choose to install the newest version before it's reviewed from the list of versions: https://addons.mozilla.org/en-US/firefox/addon/markdown-here/versions/

Manual/Development

  1. Clone this repo.
  2. Follow the instructions in the MDN "Setting up an extension development environment" article.

Safari

Download the extension directly. When it has finished downloading, double click it to install.

Preferences

To get to the Markdown Here preferences, open the Safari preferences and then go to the "Extensions" tab. Then click the "Click me to show Markdown Here options" box.

Opera

Note that Markdown Here only works with Opera versions 16 and higher (i.e., the ones that are based on Chromium).

Go to the Opera Add-ons store page for Markdown Here and install normally.

After installing, make sure to reload your webmail or restart Chrome!

Usage Instructions

Install it, and then…

  1. In Chrome/Safari/Opera, make sure you reload your web mail page before trying to use Markdown Here.

  2. In Chrome/Firefox/Safari/Opera, log into your Gmail, Hotmail, or Yahoo account and start a new email. In Thunderbird, start a new message.

  3. Make sure you're using the rich editor.

    • In Gmail, click the "Rich formatting" link, if it's visible.
    • In Thunderbird, make sure "Compose messages in HTML format" is enabled in your "Account Settings", "Composition & Addressing" pane.
  4. Compose an email in Markdown. For example:

    **Hello** `world`.
    
    ```javascript
    alert('Hello syntax highlighting.');
    ```
    
  5. Right-click in the compose box and choose the "Markdown Toggle" item from the context menu. Or click the button that appears in your address bar. Or use the hotkey (CTRL+ALT+M by default).

  6. You should see your email rendered correctly from Markdown into rich HTML.

  7. Send your awesome email to everyone you know. It will appear to them the same way it looks to you.

Revert to Markdown

After rendering your Markdown to pretty HTML, you can still get back to your original Markdown. Just right-click anywhere in the newly rendered Markdown and click "Markdown Toggle" -- your email compose body will change back to the Markdown you had written.

Note that any changes you make to the pretty HTML will be lost when you revert to Markdown.

In Gmail, you can also use the browser's Undo command (CTRL+Z / CMD+Z, or from the Edit menu). Be warned that you might also lose the last few characters you entered.

Replies

In Gmail, Thunderbird, and Google Groups, you can use "Markdown Toggle" normally: just write your reply (top, bottom, inline, wherever) and then convert. The original email that you're replying to will be left alone. (Technically: Existing blockquote blocks will be left intact.)

In Hotmail and Yahoo (which don't put the original in a blockquote), and optionally in Gmail, Thunderbird, and Google Groups, you can ensure that only the part of the reply that you wrote gets converted by selecting what you want to convert and then clicking "Markdown Toggle" -- see the next section.

Selection/Piecemeal Conversion

Sometimes you don't want to convert the entire email; sometimes your email isn't entirely Markdown. To convert only part of the email, select the text (with your mouse or keyboard), right-click on it, and click the "Markdown Toggle" menu item. Your selection is magically rendered into pretty HTML.

To revert back to Markdown, just put your cursor anywhere in the block of converted text, right click, and click the "Markdown Toggle" menu item again. Now it's magically back to the original Markdown.

screenshot of selection conversion

Things to know about converting/reverting a selection

  • If you select only part of a block of text, only that text will be converted. The converted block will be wrapped in a paragraph element, so the original line will be broken up. You probably don't want to ever do this.

  • You can select and revert multiple converted blocks at the same time. One upshot of this is that you can select your entire email, click "Markdown Toggle", and all portions of it that you had converted will be reverted.

  • If you don't have anything selected when you click "Markdown Toggle", Markdown Here will check if there are converted blocks anywhere in the message and revert them. If there no converted blocks are found, it will convert the entire email.

Options

The Markdown Here Options page can be accessed via the Chrome, Firefox, Safari, or Thunderbird extensions list. The available options include:

  • Styling modifications for the rendered Markdown.
  • Syntax highlighting theme selection and modification.
  • TeX math formulae processing enabling and customization.
  • What the hotkey should be.

For Chrome and Firefox, any changes made in the Markdown Here Options are automatically synchronized between your other installations of that browser (if you have the sync feature enabled in the browser).

screenshot of options

Troubleshooting

See the Troubleshooting wiki page.

Compatibility

See the Compatibility wiki page.

Notes and Miscellaneous

  • Markdown Here uses Github Flavored Markdown, with the limitation that GFM special links are not supported (issue #11); nor will they be, as MDH is not Github-specific.

  • Available languages for syntax highlighting (and the way they should be written in the fenced code block) can be seen on the highlight.js demo page.

  • Images embedded inline in your Markdown will be retained when you "Markdown Toggle". Gmail allows you to put images inline in your email -- this can be much easier than referencing an external image.

  • Email signatures are automatically excluded from conversion. Specifically, anything after the semi-standard '-- ' (note the trailing space) is left alone.

    • Note that Hotmail and Yahoo do not automatically add the '-- ' to signatures, so you have to add it yourself.
  • The "Markdown Toggle" menu item shows up for more element types than it can correctly render. This is intended to help people realize that they're not using a rich editor. Otherwise they just don't see the menu item and don't know why.

  • Styling:

    • The use of browser-specific styles (-moz-, -webkit-) should be avoided. If used, they may not render correctly for people reading the email in a different browser from the one where the email was sent.
    • The use of state-dependent styles (like a:hover) don't work because they don't match at the time the styles are made explicit. (In email, styles must be explicitly applied to all elements -- stylesheets get stripped.)
  • For more tweaky features, visit the Tips and Tricks section.

Building the Extension Bundles

"Building" is really just zipping. Create all archives relative to the src directory.

Before zipping, delete the src/common/test directory. This will prevent the autotests from ending up in the release.

An important preparatory step is to remove any system-generated hidden files that shouldn't be included in the release file (like Windows' desktop.ini and OS X's .DS_Store, etc.). This shell command will delete those unwanted files:

find . -name "desktop.ini" -or -name ".*" -and -not -name "." -and -not -name ".git*" -print0 | xargs -0 rm -rf

Chrome and Opera extension

Create a file with a .zip extension containing these files and directories:

manifest.json
common/
chrome/

Firefox/Thunderbird extension

Create a file with a .xpi extension containing these files and directories:

chrome.manifest
install.rdf
common/
firefox/

Safari extension

The browser-specific code is located in the markdown-here-safari project.

Use the Safari Extension Builder.

Next Steps

See the issues list and the Notes Wiki. All ideas, bugs, plans, complaints, and dreams will end up in one of those two places.

Feel free to create a feature request issue if what you want isn't already there. If you'd prefer a less formal approach to floating an idea, post to the "markdown-here" Google Group.

It also takes a fair bit of work to stay up-to-date with the latest changes in all the applications and web sites where Markdown Here works.

Credits

Markdown Here was coded on the shoulders of giants.

Feedback

All bugs, feature requests, pull requests, feedback, etc., are welcome. Create an issue. Or post to the "markdown-here" Google Group.

License

Code

MIT License: http://adampritchard.mit-license.org/ or see the LICENSE file.

Logo

Copyright 2015, Austin Anderson. Licensed to Markdown Here under the MDH contributor license agreement.

Other images

Creative Commons Attribution 3.0 Unported (CC BY 3.0) License


Dos Equis man says

You can't perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.